2014-03-29 116 views
0

是什麼關閉線程方法

ExitThread(exitcode); 

CloseHandle(threadHandle); 

之間的區別?

看來他們做同樣的事情,但他們必須有所不同。

+0

是的。這很明顯。 –

+1

CloseHandle不會終止句柄關閉的線程。相反,它「分離」線程。此外,它不會造成資源泄漏;相反,其目的是爲了避免線程對象的資源泄漏。 –

+0

我明白了。說得通。 –

回答

3

這些函數做了非常不同的事情。 ExitThread立即結束調用線程。 CloseHandle只是銷燬句柄,從而刪除對線程對象的引用。它對手柄關閉的螺紋沒有影響;該線程將繼續其正常執行。典型地,線程完成後關閉線程句柄(例如在等待WaitForSingleObject完成之後)。但有時候,對於仍在運行的線程,句柄關閉;它通常被稱爲分離線程。如果應用程序「忘記」線程並且不會等待完成,則需要執行此操作;這個線程的句柄應該關閉,以便在線程完成時讓內核自動銷燬關聯的資源。

也看到類似問題的答案:Windows C++ - closing thread with CloseHandle