当前位置:编程学习 > C#/ASP.NET >>

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

刚开到线程上下文,就随手编了一个小程序想测试一下输出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;
}


结果复制得到的句柄和返回句柄就是不一样啊,试了半天也没找到问题所在,懂得朋友指点一下了,谢啦 多线程 --------------------编程问答-------------------- 没人回复,自己先顶吧
补充:.NET技术 ,  VC.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,