【发布时间】:2013-12-13 18:53:33
【问题描述】:
我有一个类Class,其中有一个线程的成员属性HANDLE handle(我们可以假设它当时设置为NULL)。在某些时候,Class 中的一个方法通过CreateThread() 调度它自己的一个方法Class::threaded()(使用类本身外部的另一个函数,但在这里并不重要)。然后,调用线程可能会继续执行Class 之外的其他功能。
由于必须为从 CreateThread() 返回的 HANDLE 调用 CloseHandle(),所以我想知道在它返回之前从 Class::threaded() 调用它是否是一个不错的解决方案。
【问题讨论】:
-
由于您已将其标记为 C++,因此您应该使用
_beginthread或_beginthreadex。请参阅CreateThread文档:“调用 C 运行时库 (CRT) 的可执行文件中的线程应使用 _beginthreadex 和 _endthreadex 函数进行线程管理,而不是 CreateThread 和 ExitThread;” -
这是上个世纪的建议。 CRT 已经过调整来处理这个问题,它需要支持线程池线程,当然你永远不能调用 _beginthreadex。它现在可以在需要时动态分配线程本地数据。
标签: c++ multithreading winapi window-handles