• kernel object用完需要CloseHandle,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。
  • 相关阅读:
    软件测试——C#判断密码是否符合要求
    软件测试——C#判断闰年的form小程序
    初识JUnit
    软件测试的方法一共有几种
    多个异步请求调用一个回调函数
    单元测试、集成测试、系统测试总结
    软件测试同行评审流程
    白盒测试总结
    黑盒测试总结
    闰年测试
  • 原文地址:https://www.cnblogs.com/super119/p/2011418.html
Copyright © 2020-2023  润新知