谁负责为线程句柄调用 CloseHandle()
Who's responsibility is it to call CloseHandle() for Thread handle
我有一个类Class
,其中有一个线程的成员属性HANDLE handle
(我们可以假设它在这一点上设置为NULL
)。在某个时刻,Class
中的方法将其自己的方法之一Class::threaded()
(使用类本身外部的另一个函数,但在这里并不重要)与CreateThread()
一起调度。调用线程然后可以继续执行Class
之外的其他函数。
由于必须为从CreateThread()
返回的HANDLE
调用CloseHandle()
,我想知道在它返回之前从Class::threaded()
调用它是否是一个不错的解决方案。
处理线程的两种基本方法。通常,当线程终止时,您会感兴趣,您需要保留句柄,以便找到答案。当然,你会在检测到终止后关闭它。或者你不在乎,即发即弃风格,或者有额外的同步对象来发出线程功能完成和/或你要求它退出的信号。在这种情况下,你只需在启动时关闭手柄。
请记住,保持句柄打开以保持线程运行是而不是所必需的,以防这是混乱的根源。
您会收到线程的句柄,以便对其进行管理。如果不需要,您可以立即调用CloseHandle
。
关闭HANDLE
不会终止线程,因此,如果线程中没有您感兴趣的内容,那么关闭它是安全的。
您可以在使用完它后立即关闭它。关闭它对线程没有影响。(句柄是OS计数的引用。)
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 谁负责为线程句柄调用 CloseHandle()
- 在作为函数参数的句柄上调用 CloseHandle
- 何时调用CloseHandle
- 在析构函数中调用CloseHandle会导致运行时内存错误,即如何正确关闭结构/类中的文件句柄