closehandle()函数
引用自《百度百科》,用于解決今天遇到的close handle 后什么時候釋放資源問題:
?
?
方法名稱:CloseHandle
位置:Kernel32.dll
BOOL CloseHandle(
HANDLE hObject
);
參數
hObject?:代表一個已打開對象handle。
返回值
TRUE:執行成功;
FALSE:執行失敗,可以調用GetLastError()獲知失敗原因。
函數說明
編輯
關閉一個內核對象。其中包括文件、文件映射、進程、線程、安全和同步對象等。在CreateThread成功之后會返回一個hThread的handle,且內核對象的計數加1,CloseHandle之后,引用計數減1,當變為0時,系統刪除內核對象。
若在線程執行完之后,沒有調用CloseHandle,在進程執行期間,將會造成內核對象的泄露,相當于句柄泄露,但不同于內存泄露,這勢必會對系統的效率帶來一定程度上的負面影響。但當進程結束退出后,系統會自動清理這些資源。
句柄(handle)由來:
編輯
windows 之所以要設立句柄,根本上源于內存管理機制的問題—虛擬地址,簡而言之數據的地址需要變動,變動以后就需要有人來記錄管理變動,(就好像戶籍管理一樣),因此系統用句柄來記載數據地址的變更。
數據對象加載進入內存中之后即獲得了地址,但是這個地址并不是固定的,(至于為什么以及什么情況下變動具體需要大家研究虛擬地址的原理與機制,我這里只提我確定知道的例子)數據對象會根據需要在內存與硬盤之間游弋移動(例如不常用的數據會為常用數據讓出其占用的內存空間,進而被淘汰進硬盤虛擬內存之中以優化配置整體系統的資源,從而提升效率性能),因此其物理地址總是變動的,那么作為管理者 則必須對 管理對象所發生的變化了如指掌才行,因此系統為進程分配固定的地址(句柄)來存儲進程下的數據對象變化后的地址,也就是當前的地址,其實設計機制很簡單 :系統的某個部門移動了對象的地址后,同時上報給句柄所屬部門管理者,管理者將改動寫入句柄即可。該數據被重新起用時去其所屬句柄內按內容存取即可。
句柄,英文:HANDLE,在Windows編程中是一個很重要的概念,在許多地方都扮演著重要的角色。但由此而產生的句柄概念也大同小異,比如:《Microsoft Windows 3 Developer's Workshop》(Microsoft Press,by Richard Wilton)一書中句柄的概念是:在Windows環境中,句柄是用來標識項目的。
在程序設計中,句柄是一種特殊的智能指針?。當一個應用程序要引用其他系統(如數據庫、操作系統)所管理的內存塊或對象時,就要使用句柄。
句柄與普通指針的區別在于,指針包含的是引用對象的內存地址,而句柄則是由系統所管理的引用標識,該標識可以被系統重新定位到一個內存地址上。這種間接訪問對象的模式增強了系統對引用對象的控制。
在上世紀80年代的操作系統(如Mac OS 和Windows)的內存管理中,句柄被廣泛應用。Unix系統的文件描述符基本上也屬于句柄。和其它桌面環境一樣,WindowsAPI大量使用句柄來標識系統中的對象,并建立操作系統與用戶空間之間的通信渠道。例如,桌面上的一個窗體由一個HWND類型的句柄來標識。如今,內存容量的增大和虛擬內存算法使得更簡單的指針愈加受到青睞,而指向另一指針的那類句柄受到冷落。盡管如此,許多操作系統仍然把指向私有對象的指針以及進程傳遞給客戶端的內部數組下標稱為句柄。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的closehandle()函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员考核的五大死因(上)
- 下一篇: 如果你扯了团队后腿,你应该内疚