使用QFuture调用本地类函数

时间:2013-04-23 12:37:40

标签: c++ multithreading qt

我有一个UI程序,我在其中使用QFuture在处理器等繁重的不同类中运行函数并导致我的UI崩溃,在使用QFuture将其解析之后它工作正常,但是我有另一个需要立即调用的函数,但是这个函数与我调用它的类在同一个类中。

我使用了相同的代码来完成第二个但它只显示了我甚至没有使用的Timers错误,我也不知道我使用{{1在参数中:

this

测试是一个本地函数,是否与我不能有两个并发:: run调用的事实有关,我已经尝试过查看那些没有帮助的文档

基本上当这被称为UI锁定并且我得到一些奇怪的警告时,我认为线程化的关键是UI不会崩溃

1 个答案:

答案 0 :(得分:1)

这是我对此的最佳猜测。

我猜你有以下情况。 (注意:在尝试为问题提出解决方案时,了解您所处的情况非常有用。通常情况下,OP会以一种根本错误的方式处理某些事情并且应该做一些完全不同的事情。)

你有一个GUI。您有一个需要很长时间的操作,您希望在工作线程中运行该操作。在长操作结束时,您需要在GUI线程上调用一个函数,可能是为了更新GUI或类似的东西。

因此,您使用QtConcurrent :: run(& someObject,& SomeObject :: task)启动后台任务。然后,您需要一些方法在GUI线程上通知任务完成时。

执行此操作的正确方法是将QtFutureWatcher附加到从run()返回的将来,并将GUI类上的插槽连接到其完成的信号。 Qt的信号机制将确保在正确的线程上调用插槽。