我正在开发一个具有多线程的 Qt 应用程序。 我使用划分我的任务并将它们放入 Qt 线程池中。 但后来我发现了intel tbb,它也是一个专业的多线程库
我喜欢 intel tbb 中提供的并发容器,但我想知道 Qt 本机线程池库是否与 Qt GUI 设计更兼容。
Aso,我尝试使用 Qt 线程池和 intel tbb 来实现我的任务,但在运行时看不到太大的不同。
那么开发Qt GUI时更推荐哪一个?
如果您需要 Qt 事件循环来接收事件,请使用 QThread,并“正确”使用它(不要子类化
QThread
)。否则,请使用最适合您需要的东西。混合不是问题,就像一般的线程一样是一个问题:你必须知道你在做什么。
对于 Qt,发出信号和发布事件通常是线程安全的,除非你做了愚蠢的事情。
QObject
实例只能与 Qt Thread 具有线程关联性,这意味着该线程的 Qt 事件循环向其传递事件和排队信号。另请注意,这与 GUI 线程中的情况相同:如果阻止事件循环,事件就会停止。
QObject
相关方法通常不是线程安全的,除非明确说是/写成是。如果您发现您正在从“错误”线程调用 QObject
子类方法,最好不要这样做。例如,您可能需要拆分类、通过事件循环调用方法,或者根本不使用 QObject。