【发布时间】:2010-10-16 22:12:12
【问题描述】:
我正在阅读关于_beginthreadex 和_endthreadex 的documentation,但有些事情我不明白。
请注意,文档会同时记录“扩展”和正常功能,但我没有使用_beginthread 和_endthread;只有他们的扩展版本。
您可以调用 _endthread 或 _endthreadex 显式终止线程;但是,_endthread 或 _endthreadex 在线程从 例程作为参数传递。 通过调用来终止线程 endthread 或 _endthreadex 有助于 确保适当回收资源 分配给线程。
- 如果
_endthreadex是自动调用的,那么调用它如何有助于确保“正确回收资源”?不管我叫还是不叫都应该没什么区别?
_endthread 自动关闭线程句柄(而 _endthreadex 才不是)。因此,当使用 _beginthread 和 _endthread,不要显式关闭线程句柄 调用 Win32 CloseHandle API。
- 如果
_endthreadex不关闭手柄,为什么我不应该用CloseHandle关闭它? -
我所有的线程只是通过从它们的主函数返回来自愿终止,并且永远不会被强制终止。根据文档,当这种情况发生时,
_endthreadex会被自动调用。这虽然不会关闭句柄。假设我确实需要关闭它,尽管上面说了些什么,我该怎么做,因为此时线程已经死了?我应该以某种方式从另一个线程关闭它吗?如果我让它打开会怎样?
【问题讨论】:
-
这个答案可能会有所帮助:stackoverflow.com/a/31257350/6364089
标签: c++ multithreading winapi