如何使用 C++ 在 Windows 中创建守护线程?

Posted

技术标签:

【中文标题】如何使用 C++ 在 Windows 中创建守护线程?【英文标题】:How do I create a daemon thread in Windows with c++? 【发布时间】:2013-01-26 10:25:09 【问题描述】:

我正在尝试使用本机 api 在 c++ 中为 Windows 创建一个守护线程,但我似乎找不到对守护线程的任何引用。有没有人有与此相关的文档的链接,或者在 Windows 上有不同的术语吗? c++中如何在windows上创建守护线程?

【问题讨论】:

什么是守护线程? (例如,python 中有这样的东西,但它是特定于 python 的)。是退出时不想加入的那个吗?那就别加入了。 我认为标准定义是只有当所有守护线程都返回时,进程才应该退出。 对于python,情况正好相反:“当所有非守护线程返回时”。对于 Windows 上的 C,线程本身没有这种区别(与 pthreads 不同,如果有后台线程,从main 返回不会终止应用程序,但ExitProcess_exitexit 会这样做)。 “只有当所有守护线程都返回时,一个进程才应该退出”windows中的每个线程都是这样的。除非您通过api明确告诉它(提到了ExitProcess),否则进程不会退出,直到其中的每个线程都消失了。我认为大多数操作系统都是这种情况? @chacham15 我从main 返回时出错了,它相当于Windows 上的exit。和 POSIX 中一样,main 中的 _endthread(0) 不会杀死其他线程。 【参考方案1】:

在 Windows 中,您的主线程应该调用 ExitProcess 或在进程准备退出时从 main() 函数返回。如果有其他不应终止的线程正在运行,您有责任跟踪这一点,并且在这些线程完成之前不要退出主函数

实际上,这意味着所有线程都是“守护线程”。

(原则上,没有线程是守护线程;如果您明确地终止主线程,则该进程将在所有线程退出之前不会退出。不幸的是,这包括 Windows 自动为您创建的线程,其中一些可能永远不会退出,所以这不是一个好主意。)

【讨论】:

以上是关于如何使用 C++ 在 Windows 中创建守护线程?的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中创建 Windows 共享库时如何实现接口隔离

如何使用 c++ 和 opengl 在 mac 中创建窗口?

如何在 Visual Studio 2017 中创建 C++ Windows 桌面应用程序?

如何在 Windows ( C++ ) 中创建进程以运行另一段代码?

在 Windows 中创建 C++ 非阻塞计时器

如何在 c++ 中创建一个适用于 Windows 和 linux 的文件夹(目录)[重复]