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