2011-07-15 128 views
1

這就是我在我的代碼中所要做的: 我創建了一個事件,創建了一個線程。如果主線程中的某些內容失敗,我將事件設置爲指示關於失敗的關聯線程,並指示它正常退出關聯的線程。在退出相關線程之前關閉線程句柄

我的問題是,在關聯線程仍在運行(嘗試清理和退出)時,在事件設置之後關閉線程句柄是否安全?試圖立即關閉線程句柄而不等待關聯線程返回的意圖是避免拖延等待主線程的其他人,直到關聯線程返回。

請推薦。謝謝。

回答

3

是的,它是安全的。從CreateThread documentation

線程對象仍保留在系統中,直到線程終止,所有的句柄它已經通過調用關閉CloseHandle

當然,如果你關閉了線程的句柄,那麼你不能再通過調用WaitForSingleObject/WaitForMultipleObjects來等待它。

+0

謝謝亞當。我不想等待關聯的線程返回(除非它會產生問題)。所以,線程創建並開始運行後,我不需要該句柄。我正在清理並妥善地退出相關的線程,以防出現問題。所以,我認爲在關聯線程仍在運行時關閉句柄,甚至退出主線程應該是安全/合法的。 – MemoryLeak

0

即使在您的線程函數內關閉線程句柄也不是一種罪過,但事情是您將無法使用該線程句柄進行任何通信。其他選項是無論你發信號通知事件使用waitforsingleobject並等待線程句柄。一旦它返回,你可以關閉句柄。