gpt4 book ai didi

c++ - 如何优雅地退出多线程应用程序?

转载 作者:太空狗 更新时间:2023-10-29 19:56:36 25 4
gpt4 key购买 nike

如果我有一个 Qt 应用程序(使用 QCoreApplication),并且该应用程序启动了几个永久线程,关闭该应用程序的正确方法是什么?

只在其中一个线程中运行 QCoreApplication::quit() 可以吗?这会导致其他线程正常终止(并调用所有包含的对象的析构函数,而不是被强制终止)吗?

进一步的细节来解释线程的性质:它们是预定义的并且从启动开始运行并且在应用程序退出之前不会停止,即它们是永久的。它们运行自己的事件循环并通过信号和槽与其他线程通信。这些是正常的线程,而不是基于任务的并发。

最佳答案

大多数长时间运行的“thread main”函数的形式有点像下面这样:

while (doWork) {
work();
}

doWork 是一个 std::atomic<bool> .

当主线程要退出时,它设置myThread.doWork = false在所有仍然存在的线程上,这允许它们在准备就绪时退出。

调用 myThread.wait()在主线程上,它会阻塞,直到您告诉它停止工作的线程实际停止为止。在为所有线程执行此操作时,当主线程离开 main() 时,它是唯一仍在运行的线程。

边注: 如果您必须等待工作被推送到它,您可能需要查看 QWaitCondition 类,以便您可以在有工作时和您希望它停止时唤醒您的线程。

关于c++ - 如何优雅地退出多线程应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46216255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com