当前位置:  开发笔记 > 编程语言 > 正文

如何确定Win32线程是否已终止?

如何解决《如何确定Win32线程是否已终止?》经验,为你挑选了2个好方法。

如何确定Win32线程是否已终止?

GetExitCodeThread的文档警告不要因为这个原因使用它,因为出于其他原因可以返回错误代码STILL_ACTIVE.

谢谢您的帮助!:)



1> Michael Burr..:

MSDN提到"当线程终止时,线程对象获得信号状态,满足任何等待对象的线程".

因此,您可以通过检查线程句柄的状态来检查线程是否已终止 - 是否已发出信号:

DWORD result = WaitForSingleObject( hThread, 0);

if (result == WAIT_OBJECT_0) {
    // the thread handle is signaled - the thread has terminated
}
else {
    // the thread handle is not signaled - the thread is still alive
}


请注意,上面用于检查`result`的代码不正确.技术上有3种可能的返回值:`WAIT_OBJECT_0`,`WAIT_TIMEOUT`和`WAIT_FAILED`.所以它不能只是它,"是的,它还活着." 只有当你得到`WAIT_TIMEOUT`时才会这样,否则就是错误.

2> Shog9..:

您链接的文档警告不要将其STILL_ACTIVE用作返回代码,因为它无法与用于指示活动线程的返回值区分开来.因此,不要将它用作返回值,您将不会遇到此问题.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有