Qt - 在其他线程上运行函数

Posted

技术标签:

【中文标题】Qt - 在其他线程上运行函数【英文标题】:Qt - run function on other thread 【发布时间】:2019-09-21 00:10:44 【问题描述】:

在我的简单 QApplication 中,我有这样的场景:

Class1 从主线程调用。

Class2 从包含 Class1 引用的其他线程调用。

是否可以使用主线程从 Class2 调用 Class1 函数?

我尝试使用 moveToThread 没有成功。感谢您的建议,最好的问候。

丹尼尔

【问题讨论】:

不清楚你在问什么。我认为有一些术语混淆,例如class 是一种类型,因此无法调用。 minimal reproducible example 会有所帮助。 如果我理解你的问题,我想你可能想使用信号和插槽。 是的,这是可能的。您可以从 Class2 调用 Class1 的非静态成员函数 【参考方案1】:

最简单的方法可能是通过 to 对象之间的信号到槽连接进行调用。建立连接时指定Qt::QueuedConnectionQt::BlockingQueuedConnection 作为连接类型。这种类型的连接会在接收对象的线程上对信号进行排队。

详情见ConnectionType 和connect

【讨论】:

完美,我使用了 Qt::QueuedConnection 并且该函数总是在主线程上调用。谢谢

以上是关于Qt - 在其他线程上运行函数的主要内容,如果未能解决你的问题,请参考以下文章

在 QT 的不同线程中运行函数

QT 线程从不运行

由“Qt程序运行一段时间后崩溃”引发的“opancv库中Mat::clone()函数”在多线程下的注意事项

QT 使用C++线程池运行Lambda自定义函数

QT 使用C++线程池运行Lambda自定义函数

如何在另一个 Qt 线程上运行它?