正文

FAQ 04:为什么我应该调用CloseHandle()?2007-12-12 10:41:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lym51/31392.html

分享到:

当完成工作后,应该调用CloseHandle释放核心对象

BOOL  CloseHandle(

HANDLE    hObject

);

参数    hObject   代表一个已打开对象handle

返回值

         如果成功,CloseHandle()返回TRUE。如果失败则返回FALSE,此时可以调用GetLastError()获知失败原因。

         如果一个进程没有在结束前针对它所打开的核心对象调用CLoseHandle(),OS会自动把那些对象的引用计数下降1。虽然可以依赖OS做实体(physical)上的清除(cleanup)工作,然而逻辑上的清除工作又是完全不同的一回事,特别是如果你有许多个进程的话。因为OS并不知道对象实际代表什么意义,所以它不可能知道解构顺序是否重要。

        如果一个进程常常产生“worker线程”而总不关闭线程的handle,那么这个进程可能最终有数百个甚至更多的个开启的“线程核心对象”留给OS去清理。这样的resource leaks可能会对效率带来负面影响。

   另外一点也很重要:不可以依赖“因线程的结束而清理所有被这一线程产生的核心对象”。许多对象,例如文件,是被进程拥有,而非被线程拥有。在进程结束之前不能够清理它们!

阅读(3841) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册