错误:无法从另一个线程启动计时器.使用未声明计时器的QFuture



我使用QFuture来添加线程到我的ui应用程序,我从一个线程调用一个方法,并有一个监视器和信号设置,以便当第一个函数完成时第二个函数被调用

都使用相同的代码来执行

第一次使用QFuture

future = QtConcurrent::run(&Test, &test::getAll);

watcher->setFuture(*future);

第二次使用QFuture

*future2 = QtConcurrent::run(this, &GUI::paintAll);
watcher2->setFuture(*future2);

当第二个函数被调用时,我得到这个警告

QObject::startTimer: timers cannot be started from another thread

然后它有时会崩溃,有时它不会,但我只是忍不住觉得它与此有关,我问了这么多问题,现在没有答案的工作,有人能告诉我为什么我被警告定时器当我甚至不使用它们,也为什么我警告只有第二次我调用一个qfuture函数从来没有在第一个??

在Qt中,GUI类只能由主线程访问(也称为"GUI线程")。不能在另一个线程中运行绘制函数。见http://qt - project.org/doc/qt 5.0 -/- qtcore/thread basics.html # gui-thread-and-worker-thread

我猜GUI::paintAll()间接调用Qt GUI类,它在内部使用计时器。

最新更新