求助,学习多线程遇到的问题

ccy19881932 2013-01-28 02:55:39
刚开到线程上下文,就随手编了一个小程序想测试一下输出context中的成员,我先开始是直接使用返回到的线程句柄H没有问题,后来我想试试duplicatehandle函数,代码如下:(vs2008)
// CONTEXT.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <process.h>
#include <Winbase.h>
#include <strsafe.h>
using namespace std;

HANDLE * HChildHandle = new HANDLE; //子线程句柄
unsigned WINAPI newthread(void * lpParameter); //声明子线程函数

int _tmain(int argc, _TCHAR* argv[])
{
std::wcout.imbue(std::locale("chs"));
HANDLE H = (HANDLE)_beginthreadex(NULL,0,newthread,(void *)HChildHandle,0,NULL);
Sleep(1000);
CONTEXT context;
context.ContextFlags = CONTEXT_CONTROL;
if(*HChildHandle)
{
wcout<<HChildHandle<<'\t'<<*HChildHandle<<'\t'<<H<<endl;
SuspendThread(*HChildHandle); //线程挂起
if(GetThreadContext(*HChildHandle,&context))
{
wcout<<_T("获得线程上下文成功!")<<endl;
wcout<<_T("指令指针为:")<<context.Eip<<endl;
}
else
wcout<<_T("获得线程上下文失败!");
ResumeThread(*HChildHandle);
}
CloseHandle(*HChildHandle);
return 0;
}

unsigned WINAPI newthread(void * lpParameter)
{
HANDLE * hnewhandle = new HANDLE;
DuplicateHandle(GetCurrentProcess(),GetCurrentThread(),GetCurrentProcess(),hnewhandle,0,FALSE,DUPLICATE_SAME_ACCESS);
lpParameter = hnewhandle;
CloseHandle(*hnewhandle);
while (1)
{
//wcout<<_T("新进程在运行")<<endl;
}
return 0;
}


结果复制得到的句柄和返回句柄就是不一样啊,试了半天也没找到问题所在,懂得朋友指点一下了,谢啦
...全文
109 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccy19881932 2013-01-28
  • 打赏
  • 举报
回复
没人回复,自己先顶吧

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧