线程创建后,立刻调用CloseHandle的原因
生活随笔
收集整理的這篇文章主要介紹了
线程创建后,立刻调用CloseHandle的原因
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
HANDLE threadhandle = CreateThread(NULL, 0, RecvThreadProc, NULL, NULL, NULL);?
CloseHandle(threadhandle);?
?不明白為什么創建線程后,要馬上把線程的句柄關閉,這樣做的目的是什么? 這樣做會殺掉線程嗎?
解答:
???? 創建線程后返回了線程句柄,新創建的線程內核對象的使用計數是2,一個是線程本身,一個是創建線程的線程,創建線程的線程closehandle后,新的線程的內核對象使用計數為1,當這個新線程結束運行后內核對象的使用計數還要減1,這時內核對象的使用計數是0,則系統會自動刪除新線程的內核對象,這是正常的處理流程。
???? 你如果不顯示的調用closehandle,則新線程結束運行后,由于內核對象使用計數為1,所以不會刪除內核對象,會造成內存泄露,不過當整個進程結束時操作系統會自動關閉該進程的所有的內核對象包括這個新線程的內核對象,所以你不調用closehandle問題不大,只是在你的進程運行的時候會造成內存泄露,進程結束后系統是會自動清理的。
轉載于:https://www.cnblogs.com/tianlangshu/archive/2011/03/20/1989573.html
總結
以上是生活随笔為你收集整理的线程创建后,立刻调用CloseHandle的原因的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MFC 使用datetimepicker
- 下一篇: 路由与交换 基础 1:组播