谁负责为线程句柄调用 CloseHandle()

Who's responsibility is it to call CloseHandle() for Thread handle

本文关键字:调用 CloseHandle 句柄 线程      更新时间:2023-10-16

我有一个类Class,其中有一个线程的成员属性HANDLE handle(我们可以假设它在这一点上设置为NULL)。在某个时刻,Class中的方法将其自己的方法之一Class::threaded()(使用类本身外部的另一个函数,但在这里并不重要)与CreateThread()一起调度。调用线程然后可以继续执行Class之外的其他函数。

由于必须为从CreateThread()返回的HANDLE调用CloseHandle(),我想知道在它返回之前从Class::threaded()调用它是否是一个不错的解决方案。

处理线程的两种基本方法。通常,当线程终止时,您会感兴趣,您需要保留句柄,以便找到答案。当然,你会在检测到终止后关闭它。或者你不在乎,即发即弃风格,或者有额外的同步对象来发出线程功能完成和/或你要求它退出的信号。在这种情况下,你只需在启动时关闭手柄。

请记住,保持句柄打开以保持线程运行是而不是所必需的,以防这是混乱的根源。

您会收到线程的句柄,以便对其进行管理。如果不需要,您可以立即调用CloseHandle

关闭HANDLE不会终止线程,因此,如果线程中没有您感兴趣的内容,那么关闭它是安全的。

您可以在使用完它后立即关闭它。关闭它对线程没有影响。(句柄是OS计数的引用。)