主線程只要擁有線程控制代碼,事後就可以對線程執行某些操作,比如查詢線程狀態等等,靠的就是控制代碼,如果沒有控制代碼,系統就無從知道要查的是那個線程的狀態。但保持這個控制代碼不關閉,並不是線程啟動並執行條件。
關閉線程控制代碼只是釋放控制代碼資源,新開啟線程後,如果不再利用其控制代碼,應該關閉控制代碼,釋放系統資源。關閉線程控制代碼和線程的結束與否沒有關係。
控制代碼可以認為是系統對資源(如線程)的分配的一個編號。關閉這個編號,對於不同的資源,效果不盡相同。對於線程來說,關閉這個編號並不意味著終止線程,只是之後很難再操縱這個線程。這就好比摘掉了門牌號,並不傷害這一家人,只是以後往這送信就麻煩些了。還有,如果主線程只想建立線程,而並不想之後再查詢或操縱它,那麼及時關閉控制代碼是個好習慣,免得當時沒關,以後又忘了,於是泄漏了系統的控制代碼資源(系統控制代碼總數是有限的)。
如果知道引用計數是怎麼回事就很好解釋了。CloseHandle(hThread) 只是減去一個hThread的引用計數。
線程控制代碼就像你家的地址,線程就像你的家房子,你說如果沒有了你家的地址,難道就沒有你家的房子了嗎?
線程與線程控制代碼也是一樣的道理,控制代碼只是可以對這個線程作一些操作。
CloseHandle是關閉線程控制代碼,用來釋放線程資源的,不是終止線程的.線程的終止用terminatethread或exitthread,TerminateThread的使用會導致各類資源釋放問題,主要是與該線程相連的各類dll,他們無法得到線程退出的通知。應該線上程中自然退出(即隱式調用ExitThread)或直接顯式調用ExitThread。退出的時機應由同步對象或其他機制來實現,而且主線程一般應使用WaitForSingleObject函數等待該線程的控制代碼,以確保線程的退出。
希望對你有協助 ......
轉自:http://blog.csdn.net/boy8239/article/details/2148373