CloseHandle()函數(關閉線程句柄)的使用

很多程序在創建線程都這樣寫的:

............

ThreadHandle = CreateThread(NULL,0,.....);

CloseHandel(ThreadHandle );

。。。。。

這不是剛好創建又關閉了嗎?線程怎麼運行呢?

答:

Closing a thread handle does not terminate the associated thread. To remove a thread object, you must terminate the thread, then close all handles to the thread.

引自MSDN

1,線程和線程句柄(Handle)不是一個東西,線程是在cpu上運行的.....(說不清楚了),線程句柄是一個內核對象。我們可以通過句柄來操作線程,但是線程的生命週期和線程句柄的生命週期不一樣的。線程的生命週期就是線程函數從開始執行到return,線程句柄的生命週期是從CreateThread返回到你CloseHandle()。

2,所有的內核對象(包括線程Handle)都是系統資源,用了要還的,也就是說用完後一定要closehandle關閉之,如果不這麼做,你係統的句柄資源很快就用光了。

3,如果你CreateThread以後需要對這個線程做一些操作,比如改變優先級,被其他線程等待,強制TermateThread等,就要保存這個句柄,使用完了在CloseHandle。如果你開了一個線程,而不需要對它進行如何幹預,CreateThread後直接CloseHandle就行了。

所以

CloseHandel(ThreadHandle );

只是關閉了一個線程句柄對象,表示我不再使用該句柄,即不對這個句柄對應的線程做任何干預了。並沒有結束線程。

如果你覺得多了一個變量,也可以寫爲:

CloseHandel(CreateThread(NULL,0,.....));

 

文章出處:DIY部落(http://www.diybl.com/course/3_program/c++/cppjs/20090208/155031.html)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章