谁有责任为Thread句柄调用CloseHandle()

时间:2013-11-27 22:22:32

标签: c++ multithreading winapi window-handles

我有一个类Class,其中有一个成员属性HANDLE handle到一个线程(我们可以假设它在那时被设置为NULL)。在某些时候,Class中的一个方法使用Class::threaded()调度其中一个方法CreateThread()(使用另一个类本身外部的函数,但这并不重要) 。然后,调用线程可以继续Class之外的其他功能。

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

3 个答案:

答案 0 :(得分:13)

处理线程的两种基本方法。通常,当线程终止时你会感兴趣,你需要保持手柄,这样你才能找到答案。当然,在您检测到终止后,您将关闭它。或者你不关心,发送火箭,或者有其他同步对象来表示线程功能已完成和/或你要求它退出。在这种情况下,您只需在启动时立即关闭手柄。

请记住,保持句柄打开以保持线程运行是必要的,以防这是混淆的来源。

答案 1 :(得分:5)

您收到线程的句柄,以便您可以管理它。如果没有必要,您可以立即致电CloseHandle

关闭HANDLE将无法终止该线程,因此,如果您对该线程中没有任何内容感兴趣,那么关闭它是安全的。

答案 2 :(得分:4)

您可以在使用它后立即将其关闭。关闭它对线程没有影响。 (句柄由OS计算引用。)