DuplicateHandle 复制的线程句柄,为什么在主线程取不到GetExitCodeThread

unhappyless 2015-12-02 06:34:06

#include <windows.h>
#include <process.h>
#include <stdio.h>
#include <iostream>
using namespace std;

HANDLE g_Handle =NULL;
unsigned __stdcall thread_func(void* lpParam)
{

BOOL ret = DuplicateHandle(GetCurrentProcess(),GetCurrentThread(),
GetCurrentProcess(),&g_Handle,DUPLICATE_SAME_ACCESS,FALSE,0);

if(!ret)
{
cout<<"DuplicateHandle Failed "<<GetLastError()<<endl;
}

Sleep(10000);


return 9;
}



int main()
{
HANDLE hThread = (HANDLE)_beginthreadex(NULL,0,thread_func,NULL,0,NULL);

CloseHandle(hThread);
int j = 10;
while(j--)
{
if(g_Handle)
{
DWORD code;
BOOL ret = GetExitCodeThread(g_Handle,&code);
if(ret)
{
cout<<" ExitCode: "<<code<<endl;
}
else
{
cout<<"GetExitCodeThread return FALSE ErrorCode:"<<GetLastError()<<endl;
}

}
else
{
cout<<"g_Handle Is NULL"<<endl;
}
Sleep(1000);
}

cout<<"press any key to continue..."<<endl;
getchar();

}


我知道主线程创建线程时返回了句柄,用这个句柄可以取到GetExitCodeThread 。但我有个需求就如上代码所示,只能在子线程里操作,我想获得当前线程真实句柄。
看msdn上说GetCurrentThread 获得的是伪句柄,DuplicateHandle 后就获得真实句柄,请教下我是哪用错了
...全文
124 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-12-03
  • 打赏
  • 举报
回复
《Windows核心编程》
Saleayas 2015-12-03
  • 打赏
  • 举报
回复
HANDLE volatile g_Handle =NULL;
lm_whales 2015-12-02
  • 打赏
  • 举报
回复
GetCurrentProcess() 读取,进程句柄,然后读出进程ID然后枚举其中的主线程
unhappyless 2015-12-02
  • 打赏
  • 举报
回复
顶起来顶起来

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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