QThreads和QRunnable有什么区别?
我什么时候应该使用QThread和QRunnable?
答案 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