【发布时间】:2015-12-26 22:43:17
【问题描述】:
我有一个在 std::thread 上运行的模拟,它有规律的睡眠周期,并且在每个周期结束时 QWidget::update() 在我的自定义 QGraphicsObject 上被调用。它大部分时间都在工作,有时在 1024^2 网格上计算 100k 次迭代,但有时 QGraphicsView 不再自我更新。我怀疑存在多线程通信问题。
我读到过,例如 Cocos2d-x 不能处理它的 API 中的并发调用,除了一些属性修改。我没有在 Qt 文档上找到有关线程安全的信息,这里有些人说 Qt Widgets 不是线程安全的。实际上 QWidget::update() 是一个公共插槽,所以我应该尝试将所有直接函数调用转换为 update() 以发出信号吗?我想用纯 C++ 做我的线程,在使用 Qt 时有什么限制?
(如果像这样使用 std::thread 应该是安全的,我将专门针对该问题提出一个新问题)
【问题讨论】:
-
创建问题最难的部分是找到可能的重复项 :( 这个问题是 4 年前提出的,有 5383 次查看。在查询“qt thread-safety”后我仍然无法在谷歌上找到它“即使它的标签中有“qt”和“thread-safety”......嗯
标签: c++ multithreading qt thread-safety qwidget