0

我有一个 UI 程序,在该程序中,我曾经QFuture在另一个类中运行一个函数,该函数对处理器等很重,并导致我的 UI 崩溃,在使用 QFuture 将其线程化后它工作正常,但是我有另一个需要的函数之后立即被调用,但是这个与我调用它的位置在同一类中。

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

future = new QFuture<void>;

*future = QtConcurrent::run(this, &GUI::test);

test 是一个本地函数,这是否与我不能有两个并发 ::run 调用或其他东西有关,我尝试查看文档,但不幸的是没有帮助

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

4

1 回答 1

1

这是我对此的最佳猜测。

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

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

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

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

于 2013-04-23T15:43:56.953 回答