Qt - 如何在不显式实现线程的情况下同时运行两个插槽
Posted
技术标签:
【中文标题】Qt - 如何在不显式实现线程的情况下同时运行两个插槽【英文标题】:Qt- how to run two slots simultaneously without explicitly implementing threads 【发布时间】:2016-08-31 13:16:35 【问题描述】:我有两个连接到同一个信号的 Qt 插槽。
我必须在不显式使用 Qt 多线程的情况下并行运行它们。
我搜索了 Qt 是否提供了隐含的解决方案,但我没有找到。
在 Qt 中有什么解决方案吗?
【问题讨论】:
不。并行 = 多线程。如果你没有多线程,那么你就不能并行处理。 投票决定关闭,因为不清楚。并行运行它们而不并行运行它们?此外,即使 with 线程,您也不能保证它们实际上是并行运行的。如果您使用的是单线程 CPU,或者操作系统只为您的程序分配一个内核,该怎么办? @MSalters:你可以写一个完整的答案,我会打勾并点赞。许多 Qt 用户可能会遇到这个问题。 如上所述,如果没有多线程,您将无法并行运行任何东西。如果“不使用多线程”是指“每个插槽在单独的线程中,但不使用和继承 QThread”,那么有一个非常简单的解决方案 @BeardedBeaver:是的,这就是我想要的。我重新编辑了这个问题 【参考方案1】:您需要将信号连接到slot()
并使用QtConurrent
完成所有工作
#include <QtConcurrent>
#include <QFuture>
...
void MyClass::slot()
QFuture <void> future1, future2;
future1 = QtConcurrent::run(this,&MyClass::slot1);
future2 = QtConcurrent::run(this,&MyClass::slot2);
future1.waitForFinished();
future2.waitForFinished();
您需要使用并发模块。在.pro
文件中,添加:
QT += concurrent
【讨论】:
变化:只有两个插槽,一个QtConcurrent::run
调用slot2
在slot1
的开头。然后做slot1
的正常工作,在slot1
的末尾你调用waitForFinished
slot2
的未来。以上是关于Qt - 如何在不显式实现线程的情况下同时运行两个插槽的主要内容,如果未能解决你的问题,请参考以下文章
如何在不显式编译的情况下让 Visual Studio 错误检查我的代码(显示曲线)?
数组适配器中的 get count() 如何在不显式返回数组大小的情况下返回值?
如果通过 spark-submit 提交作业,我们可以在不显式创建的情况下使用 spark 会话对象吗
使用 Excel 是不是可以在不显式生成表格数据但仅使用公式的情况下绘制图表?