【发布时间】:2013-04-23 12:37:39
【问题描述】:
我有一个 UI 程序,我在其中使用 QFuture 在不同的类中运行一个函数,该类对处理器等很重,并导致我的 UI 崩溃,在使用 QFuture 将其线程化后它工作正常,但是我有另一个函数需要在之后立即调用,但是这个函数与我调用它的位置在同一个类中。
我使用相同的代码来执行第二个代码,但它只显示关于 Timers 的错误,我什至没有使用,我也不知道我在论据:
future = new QFuture<void>;
*future = QtConcurrent::run(this, &GUI::test);
test 是一个本地函数,这是否与我不能有两个并发 ::run 调用或其他什么有关,我尝试查看文档,但不幸的是没有帮助
基本上当这被称为 UI 锁定并且我收到一些奇怪的警告时,我认为线程化的重点是 UI 不会崩溃
【问题讨论】:
-
Qt 小部件具有线程亲和性,您是否在测试中做任何必须在 GUI 线程上完成的事情,例如访问任何小部件的状态?这将解释锁定。哦,线程的重点是 UI 不应该被长操作阻塞,而不是它不会崩溃。线程太容易崩溃;)
-
我更新了 qGraphicsView 的场景?,任何想法为什么我可能会得到这个错误,但当我不做任何事情时
QObject::startTimer: timers cannot be started from another thread -
我猜你在内部做的事情会启动一个计时器。
-
那么如果我没有对象可以调用停止,我怎么能停止它,因为我从未创建过对象,并且我使用与上面完全相同的代码来调用不同的函数并且它没有提到计时器注意两个函数中都没有使用计时器
-
对此有何建议?
标签: c++ multithreading qt