zoukankan      html  css  js  c++  java
  • 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。

     

     

  • 相关阅读:
    MPlayer源代码分析
    洛谷 P1025 数的划分
    洛谷 P1209 [USACO1.3]修理牛棚 Barn Repair
    洛谷 P1744 采购特价商品
    洛谷 P1443 马的遍历
    洛谷 P1294 高手去散步
    洛谷 P2104 二进制
    洛谷 P1088 火星人
    洛谷 P1062 数列
    洛谷 P2005 A/B Problem II
  • 原文地址:https://www.cnblogs.com/super119/p/1904696.html
Copyright © 2011-2022 走看看