18

QThreads 和 QRunnable 有什么区别?

我应该何时使用 QThread 以及何时使用 QRunnable ?

4

3 回答 3

13

QThread 可以运行事件循环,QRunnable 没有,因此不要将它用于设计为具有事件循环的任务。此外,不是 QObject,QRunnable 没有内置的方式来显式地与其他组件通信。您必须使用低级线程原语(例如用于收集结果的互斥保护队列等)手动编写代码。使用 QThread,您可以使用线程安全的信号和插槽。

于 2018-11-19T18:21:58.590 回答
9

该类QRunnableQtConcurrent::run()函数非常适合我们希望在一个或多个辅助线程中执行一些后台处理而不需要 QThread 提供的全部功能和灵活性的情况。

摘自Mark Summerfield的“高级 Qt 编程:使用 C++ 和 Qt 4 创建出色的软件”

于 2013-05-28T12:28:36.110 回答
1

在使用 QThreadPool 和 QThread 之间进行选择
Qt 框架提供了许多用于多线程的工具。选择正确的工具一开始可能具有挑战性,但实际上,决策树仅包含两个选项:您要么希望 Qt 为您管理线程,要么您希望自己管理线程。但是,还有其他重要标准:

不需要事件循环的任务。具体来说,任务执行过程中不使用信号/槽机制的任务。使用:QtConcurrent 和 QThreadPool + QRunnable。

使用信号/槽并因此需要事件循环的任务。使用: Worker 对象移动到 + QThread。

有关详细说明,请参阅链接:nice read on qt threading

于 2020-12-21T13:11:42.820 回答