User & Gdi object不需要使用CloseHandle来释放

通过windows via C/C++,知道了kernel object,也知道了用完了kernel object之后,要调用CloseHandle。这个函数的作用就是将该kernel object的usage count - 1,当这个count为0的时候,该kernel object会变成signal状态/销毁。

 

kernel object是不属于process的,是属于windows内核的。process只有一个kernel object handle table,用来存放所有的kernel object handle。所以,多个process可以同时使用一个kernel object -- 只要有handle即可。

 

那么,对于user object和gdi object呢?他们两者都不属于kernel object(明显的区别就是创建这些object的时候,不需要一个SECURITY_ATTRIBUTE)。他们是一个process拥有的东西。那么,在使用完user object和gdi object之后,需要调用CloseHandle来销毁handle和object本身么?

 

查阅了MSDN之后,有了了解:不需要。user/gdi object通过相应的函数创建,比如CreateWindowEx,创建一个window user object,同时返回一个handle;当DestroyWindow调用之后,该window user object被销毁,同时对应的handle就将失效。所以,不需要手动调用CloseHandle来销毁user/gdi object。只需配对使用这些object的create方法和destroy方法即可。在MSDN中搜索user object/gdi object就可以查到这两种object的详细说明。

 

下面附上windows中user object和gdi object的所有的Create和Destroy方法,摘自MSDN。

 

User & Gdi object不需要使用CloseHandle来释放 

User & Gdi object不需要使用CloseHandle来释放 

原文链接: https://www.cnblogs.com/super119/archive/2010/12/13/1904696.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    User & Gdi object不需要使用CloseHandle来释放

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/18706

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午7:35
下一篇 2023年2月7日 下午7:36

相关推荐