簡體   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