CloseHandle 釋放線程句柄後,線程仍可用


FROM:http://hi.baidu.com/winnyang/blog/item/9acc99301e154e91a8018e54.html

1,線程的handle用處:

    線程的handle是指向“線程的內核對象”的,而不是指向線程本身 .每個內核對象只是內核分配的一個內存塊,並且只能由內核訪問。該內存塊是一種數據結構,它的成員負責維護對象的各種信息(eg: 安全性描述,引用計數等)。

2,CloseHandle()作用

   在CreateThread成功之後會返回一個hThread的handle,且內核對象的計數加1,CloseHandle之後,引用計數減1,當變爲0時,系統刪除內核對象。

   但是這個handle並不能完全代表這個線程,它僅僅是線程的一個“標識”,系統和用戶可以利用它對相應的線程進行必要的操縱。如果在線程成功創建後,不再需要用到這個句柄,就可以在創建成功後,線程退出前直接CloseHandle掉,但這並不會影響到線程的運行。

3,不執行CloseHandle() 帶來的後果

   若在線程執行完之後 ,沒有通過CloseHandle()將引用計數減1,在進程執行期間,將會造成內核對象的泄露 ,相當與句柄泄露,但不同於內存泄露, 這勢必會對系統的效率帶來一定程度上的負面影響。但是,請記住,當進程結束退出後,系統仍然會自動幫你清理這些資源。但是在這裏不推薦這種做法,畢竟不是 一個良好的編程習慣!
    ( 應用程序運行時,有可能泄露內核對象,但是當進程終止運行時,系統能確保所有內容均被正確地清除。另外,這個情況是用於所有對象,資源和內存塊,也就是說,當進程終止時,系統將保證不會留下任何對象。)

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