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