使用QFuture调用本地类函数

Using QFuture to call a local class function

本文关键字:类函数 调用 QFuture 使用      更新时间:2023-10-16

我有一个UI程序,其中我使用QFuture在一个不同的类中运行一个函数,该函数对处理器等很重,并导致我的UI崩溃,在使用QFuture将其线程化后,它工作得很好,但是我有另一个函数需要在之后调用,但是这个函数是在相同的类中,我从哪里调用它。

我用了同样的代码来做第二个但它只是显示了Timers的错误我甚至没有使用,我也不知道我在参数中使用this是否正确:

future = new QFuture<void>;
*future = QtConcurrent::run(this, &GUI::test);

test是一个局部函数,它是否与我不能有两个并发的::run调用或其他事情有关,我试着看文档,不幸的是没有帮助

当这个被调用时UI会被锁住然后我得到一些奇怪的警告,我认为线程化的意义在于UI不会崩溃

这是我的最佳猜测。

我猜你有以下情况。(注意:当你试图想出解决问题的办法时,了解你所处的情况是非常有用的。结果往往是OP以一种根本错误的方式进行某事,应该做一些完全不同的事情。

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

使用QtConcurrent::run(&someObject, &someObject::task)启动后台任务。然后,当任务完成时,您需要在GUI线程上以某种方式得到通知。

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