gpt4 book ai didi

C++线程还活着吗?

转载 作者:行者123 更新时间:2023-11-28 08:09:17 24 4
gpt4 key购买 nike

怎么做?

我尝试了 WaitingForSingleObject、GetExitCodeThread 等,但是当我用进程资源管理器终止线程时,没有任何反应。

while(true)
{
if(GetThreadId(this->hWatchThread) == 0) // Always return killed thread id!
break;
}

更新:当我终止线程时,它停止工作,但我无法从 GetThreadId

获取退出代码或零值

最佳答案

当线程被强行杀死时,例如从任务管理器或从 Process Explorer,这不会更改线程 ID。线程句柄仍然存在,因为您的进程尚未关闭它。并且与该线程关联的线程 ID 仍然存在。所以 GetThreadId 将始终返回一个非零值。

至于exit code,由于线程没有退出,所以无法获取exit code有意义的值。它被杀死了。它从来没有机会设置退出代码。

您必须做的是使用其中一个等待函数,例如WaitForSingleObject,等待您的线程句柄。如果该等待因线程被终止而终止,则等待函数将返回并报告成功等待,线程退出代码将报告为 0。据我所知,您无法通过 Windows API 辨别您的线程被异常终止。

您可以做的是使用您自己的机制来指示终止是异常的。创建线程拥有的标志,以记录终止是正常的。当线程开始执行时,将标志设置为 false。当线程正常终止时,将标志设置为 true。这样您就可以通过在线程终止后读取该标志的值来判断线程是否异常终止。

关于C++线程还活着吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9513579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com