【发布时间】:2014-04-12 22:07:45
【问题描述】:
我是 Qt 新手,但需要解决一个难题。
我创建了一个非常简单的 GUI,我需要将它添加到现有的 C++ 应用程序中。问题是,我只编写了一个模块,它插入到一个更大的架构中,这限制了我对主线程的访问。
我的代码必须位于以下四个函数中: 一个 Init() 函数,它在主线程中运行。 以及在工作线程中运行的 WorkerStart()、WorkerStep() 和 WorkerStop() 函数。
我在 Init() 函数中编写了 QApplication 和 GUI 对象。但当然,在该函数末尾调用 app.exec() 会阻塞整个其余代码。不可行。
我读到的所有内容都说 Qt gui 对象只能在主线程中运行。
所以我的问题是,如何在 init() 函数(主线程)中设置我的 gui,并从那时起仅使用工作线程运行它?
我发现了这个:QApplication In Non-Main Thread
这些解决方案给了我一些不同的行为。方向正确,但不稳定或功能不全。但是我不明白如果qt gui只能在主线程中运行,而这些解决方案将它们放在其他线程中,为什么这些都是解决方案。这样就发送了关于什么可以在其他线程中运行和不可以在其他线程中运行的混合消息,这变得非常混乱。
似乎将 gui 添加到现有 C++ 程序而不将其锁定在 exec() func 中应该是一种相当普遍的情况,所以我觉得我错过了一些明显的东西。有人可以帮我解决这个问题吗?
提前非常感谢。 菲尔
【问题讨论】:
-
QObject::moveToThread,但你肯定是在和这个流对抗。 -
嗨,马特。感谢您的评论。你能为我详细说明一下吗?涉及许多对象(QApp、QDialog 等)和一些线程。那你说什么应该移到哪里?将所有内容移至我的工作线程?还是从 main 启动一个新的 QThread?还是将 QApp 留在 main 中,然后将其他内容移至新线程?如果这真的不适合 Qt,任何人都可以推荐一个没有此限制的不同 gui 工具包吗?
标签: c++ multithreading qt