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

unhappyless unhappyless 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

#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 后就获得真实句柄,请教下我是哪用错了
...全文

相关推荐

在不同的过程中,使用DuplicateHandle(...)函数如何共享一个句柄?

首先,如果您是新手,我建议您避免在进程之间共享文件和任何句柄重复:1)这些相关技术不太容易理解; 2)它们不安全; 3)这不是推荐的做法; 建议的做法应保持...

weixin_38731761

易语言通过句柄名来关闭互斥体实现游戏多开的代码

今天小编就为大家分享一篇关于易语言通过句柄名来关闭互斥体实现游戏多开的代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

ALCH-WUR

易语言枚举进程所有句柄信息的代码

今天小编就为大家分享一篇关于易语言枚举进程所有句柄信息的代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

weixin_38693720

DuplicateHandle进程间应用监控例子

DuplicateHandle进程间应用监控例子 里面有问题的话修改函数cb为以下就正常了 procedure cb(AIdx:integer); begin closehandle(gh); TerminateProcess(getcurrentprocess, 0); end;

z109876543210

C++中句柄和指针的区别

C++中句柄和指针的区别,从广义上,能够从一个数值拎起一大堆数据的东西都可以叫做句柄。句柄的英文是"Handle",本义就是"柄",只是在计算机科学中,被特别地翻译成"句柄",其实还是个"柄"。从一个小东西拎起一大堆东西,这难道不像是个"柄"吗?

mengxiang2
评论 4
收藏 已收藏
分享
返回顶部
unhappyless
C++ 语言 65,214 成员 250,514 内容