如何在 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 中创建守护线程?

C++ 在 Windows API 中创建一个单独的线程,程序终止?

如何分析在 Windows 上运行的 C++ 代码?

有没有一种可靠的方法可以强制线程在 C++ 中停止? (尤其是分离的)

在 Windows 操作系统的情况下,如何将数据从 OpenCV 或 C++ 线程函数返回到主线程?

在 C++ 中,如何使用多个线程读取一个文件?