当完成工作后,应该调用CloseHandle释放核心对象
BOOL CloseHandle(
HANDLE hObject
);
参数 hObject 代表一个已打开对象handle
返回值
如果成功,CloseHandle()返回TRUE。如果失败则返回FALSE,此时可以调用GetLastError()获知失败原因。
如果一个进程没有在结束前针对它所打开的核心对象调用CLoseHandle(),OS会自动把那些对象的引用计数下降1。虽然可以依赖OS做实体(physical)上的清除(cleanup)工作,然而逻辑上的清除工作又是完全不同的一回事,特别是如果你有许多个进程的话。因为OS并不知道对象实际代表什么意义,所以它不可能知道解构顺序是否重要。
如果一个进程常常产生“worker线程”而总不关闭线程的handle,那么这个进程可能最终有数百个甚至更多的个开启的“线程核心对象”留给OS去清理。这样的resource leaks可能会对效率带来负面影响。
另外一点也很重要:不可以依赖“因线程的结束而清理所有被这一线程产生的核心对象”。许多对象,例如文件,是被进程拥有,而非被线程拥有。在进程结束之前不能够清理它们!
评论