是否需要调用CloseHandle?

时间:2014-01-29 10:24:02

标签: c++ c windows winapi

我正在阅读http://support.microsoft.com/kb/243953,在那里他们解释了如何将应用程序限制为单个实例。在构造和销毁时创建互斥锁,它们称为CloseHandle

这让我想到,即使应用程序关闭,也严格要求调用CloseHandle?在很多freebsd c程序中,经常使用不释放malloced内存的做法,因为操作系统会在销毁后更快地清理它。即使进程已关闭,无法调用CloseHandle来占用操作系统中的资源吗?

1 个答案:

答案 0 :(得分:10)

  

即使是,也无法调用CloseHandle占用操作系统中的资源   过程已关闭?

没有。当进程终止时,操作系统会隐式释放它一直保留的任何句柄,就像它对分配的内存一样。

从系统的角度来看,不关闭句柄的缺点再次与不释放内存的缺点相同:只要进程仍在运行,就会阻止操作系统释放逻辑上未使用的资源。

从开发人员的角度来看,缺点是没有办法自动将分配的资源划分为“故意泄露”和“由于错误而泄露”的集合。什么时候(可能不是),你知道你的应用程序正在泄漏资源,它实际上不应该是这样,这样的开放式句柄会通过帮助真正的问题隐藏在虚假的潜在客户中而使你的生活变得更加困难。