我有一个UI程序,在这个程序中,我使用QFuture在另一个类中运行了一个函数,这个类占用了大量的处理器等,导致我的UI崩溃,在使用QFuture进行线程处理之后,它工作得很好,但是我有另一个函数需要立即调用,但是这个函数与我调用它的位置在同一个类中。
我使用了相同的代码来做第二个,但它只显示了关于Timers的错误,我甚至没有使用这些错误,而且我不知道在参数中使用this是否正确:
future = new QFuture<void>;
*future = QtConcurrent::run(this, &GUI::test);测试是一个局部函数,是不是因为我不能有两个并发的::run调用,或者别的什么,我试着查看文档,但不幸的是没有帮助
基本上,当这被调用时,UI锁定,我收到一些奇怪的警告,我认为线程的要点是UI不会崩溃
发布于 2013-04-23 23:43:57
这是我对此最好的猜测。
我猜你有以下情况。(注意:在试图提出问题的解决方案时,了解您所处的情况是非常有用的。通常,事实证明,OP正在以一种根本错误的方式来做一些事情,应该做一些完全不同的事情。)
你有一个图形用户界面。您有一个需要很长时间的操作,您希望在工作线程中运行该操作。在长操作结束时,您需要在GUI线程上调用一个函数,可能是为了更新GUI或类似的东西。
因此,您可以使用QtConcurrent::run(&someObject,&SomeObject:: task )启动后台任务。然后,当任务完成时,您需要通过某种方式在GUI线程上得到通知。
执行此操作的正确方法是将一个QtFutureWatcher附加到从run()返回的未来,并将GUI类上的一个插槽连接到它的完成信号。Qt的信号机制将确保在正确的线程上调用插槽。
https://stackoverflow.com/questions/16169545
复制相似问题