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
}
code == WAIT_TIMEOUT && ExitCode == STILL_ACTIVE
,其中 code
和 ExitCode
是由 DWORD code = WaitForSingleObject(tHwnd, 0)
和 GetExitCodeThread(tHwnd, &ExitCode)
定义的。 - Chef Pharaohresult
的代码是不正确的。从技术上讲,有三种可能的返回值:WAIT_OBJECT_0
、WAIT_TIMEOUT
和WAIT_FAILED
。因此,它不能只是简单地用else语句判断“是的,它还活着”。只有当你得到WAIT_TIMEOUT
时才能这样做,否则就是一个错误。 - c00000fd你链接的文档警告不要使用STILL_ACTIVE
作为返回代码,因为它无法与用于指示活动线程的返回值区分开来。 所以不要将其用作返回值,就不会有这个问题。