C ++ / Qt - QThread与QRunnable

时间:2013-05-28 12:15:55

标签: c++ qt concurrency qthread

QThreads和QRunnable有什么区别?

我什么时候应该使用QThread和QRunnable?

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

QThread可以运行一个事件循环,QRunnable没有一个事件循环,因此不要将其用于设计有事件循环的任务。同样,QRunnable也不是QObject,它没有将某些内容显式地传递给其他组件的内置方法。您必须使用低级线程原语(例如,用于收集结果的互斥体保护的队列等)手动进行编码。使用QThread,您可以使用线程安全的信号和插槽。

答案 2 :(得分:1)

选择使用 QThreadPool 和 QThread
Qt 框架提供了许多用于多线程的工具。选择合适的工具起初可能具有挑战性,但实际上,决策树只包含两个选项:您要么希望 Qt 为您管理线程,要么希望自己管理线程。但是,还有其他重要标准:

不需要事件循环的任务。具体而言,在任务执行期间未使用信号/槽机制的任务。 使用:QtConcurrent 和 QThreadPool + QRunnable。

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

Refer the link for detailed description: nice read on qt threading