[英]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.