繁体   English   中英

C ++线程还活着吗?

[英]c++ thread alive?

如何?

我尝试了WaitingForSingleObject,GetExitCodeThread等,但是当我用进程资源管理器杀死线程时,什么也没发生。

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

Upd:当我杀死线程时,它停止工作,但是我无法从GetThreadId获取退出代码或零值

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

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

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

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

如果要在线程退出后执行某些操作:

WaitForSingleObject(handle_to_your_thread,INFINITE);
MessageBox(NULL,"Thread has exited","Foo",MB_ICONINFORMATION);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM