建立線程後為什麼關閉了線程控制代碼,線程還是可以運行?

來源:互聯網
上載者:User

 主線程只要擁有線程控制代碼,事後就可以對線程執行某些操作,比如查詢線程狀態等等,靠的就是控制代碼,如果沒有控制代碼,系統就無從知道要查的是那個線程的狀態。但保持這個控制代碼不關閉,並不是線程啟動並執行條件。

        關閉線程控制代碼只是釋放控制代碼資源,新開啟線程後,如果不再利用其控制代碼,應該關閉控制代碼,釋放系統資源。關閉線程控制代碼和線程的結束與否沒有關係。

       控制代碼可以認為是系統對資源(如線程)的分配的一個編號。關閉這個編號,對於不同的資源,效果不盡相同。對於線程來說,關閉這個編號並不意味著終止線程,只是之後很難再操縱這個線程。這就好比摘掉了門牌號,並不傷害這一家人,只是以後往這送信就麻煩些了。還有,如果主線程只想建立線程,而並不想之後再查詢或操縱它,那麼及時關閉控制代碼是個好習慣,免得當時沒關,以後又忘了,於是泄漏了系統的控制代碼資源(系統控制代碼總數是有限的)。

       如果知道引用計數是怎麼回事就很好解釋了。CloseHandle(hThread)   只是減去一個hThread的引用計數。

       線程控制代碼就像你家的地址,線程就像你的家房子,你說如果沒有了你家的地址,難道就沒有你家的房子了嗎?  

線程與線程控制代碼也是一樣的道理,控制代碼只是可以對這個線程作一些操作。

        CloseHandle是關閉線程控制代碼,用來釋放線程資源的,不是終止線程的.線程的終止用terminatethread或exitthread,TerminateThread的使用會導致各類資源釋放問題,主要是與該線程相連的各類dll,他們無法得到線程退出的通知。應該線上程中自然退出(即隱式調用ExitThread)或直接顯式調用ExitThread。退出的時機應由同步對象或其他機制來實現,而且主線程一般應使用WaitForSingleObject函數等待該線程的控制代碼,以確保線程的退出。
希望對你有協助 ......

轉自:http://blog.csdn.net/boy8239/article/details/2148373

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.