0

我使用 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 函数时才警告我从来没有在第一次调用?

4

1 回答 1

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 类,它们在内部使用计时器。

于 2013-05-01T12:31:30.173 回答