我使用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
然后它有时会崩溃有时它不会但我只是无法帮助但感觉它与此有关,iv现在问了很多关于这个的问题而没有答案可行,有人可以告诉我为什么我被警告关于计时器的时候我甚至没有使用它们,也是为什么我只是第二次警告我第一次调用qfuture函数?
答案 0 :(得分:0)
在Qt中,GUI类只能由主线程访问(它也称为“GUI线程”)。您无法在另一个线程中运行绘制函数。见http://qt-project.org/doc/qt-5.0/qtcore/thread-basics.html#gui-thread-and-worker-thread
我猜测GUI :: paintAll()间接调用Qt GUI类,它们在内部使用定时器。