如何在 Windows C++ 上分离线程
Posted
技术标签:
【中文标题】如何在 Windows C++ 上分离线程【英文标题】:How to detach a thread on Windows C++ 【发布时间】:2012-10-05 10:28:48 【问题描述】:如何在C++
中分离窗口上的线程。在Posix
我们有pthread_detach(pthread_self());
。如何在 windows 环境中实现这一点。
【问题讨论】:
在这方面,pthread 的 windows 实现是否与 *nix 不同? 我想说“DeleteFiber”,但试图记住可能不存在的等价物是在逃避我。有关该主题的更多信息,但这里是 MSDN 在线程上的链接:msdn.microsoft.com/en-us/library/windows/desktop/…std::thread::detach()
有什么问题?
分离是什么意思?如果是关于强制线程停止运行指令,请删除它的堆栈和寄存器集——TerminateThread
是答案或 1std::thread::detach()`。
@Apokal TerminateThread
,嗯,终止一个线程,绝对不与分离线程相同。分离更多的是说你并不真正关心线程资源,并希望在线程自然完成后自动清理它,但不需要显式加入它。
【参考方案1】:
假设您使用_beginthreadex或CreateThread
创建线程,您只需使用CloseHandle关闭线程句柄即可。
【讨论】:
当我看到这个答案时,我有点不安,因为我希望 Close 也会终止线程。不过,MSDN 中的这段话让事情变得清晰:'关闭线程句柄并不会终止关联的线程或删除线程对象。 (...) 要删除线程对象,您必须终止线程,然后关闭该线程的所有句柄。'以上是关于如何在 Windows C++ 上分离线程的主要内容,如果未能解决你的问题,请参考以下文章
C++ 在 Windows API 中创建一个单独的线程,程序终止?
有没有一种可靠的方法可以强制线程在 C++ 中停止? (尤其是分离的)