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