如何组合自己的消息循环和QT事件循环



我有一个从 QThread: class MyClass : public QThread派生的类。在运行方法中,我有"我自己的"消息循环:

run() { 
  // exec(); // while not reached    
  while (_runMessageLoop && ...) {
    hr = CallDispatch(.....);
    if (hr== 0) QThread::msleep(100); 
    // QCoreApplication::processEvents(); // Does not work
  }
}

由于未执行exec(),因此我有 no QT事件循环。这显然会导致信号/插槽无法正常工作。是否有机会组合QT和我自己的消息循环?,或者我需要经常发射计时器才能做我在无限循环中完成的工作?

正确的方式" qt-wise"是使用计时器,让QT管理事件循环。

如果您需要依靠外部事物,则可以使用诸如QAbstractSocket之类的事物在数据进出时发送事件,例如

这不是正确实施事件循环的真正答案,我可以肯定有一种方法,但更多的是解决方法:

正常启动线程,exec()和all,然后将启动信号连接到插槽(确保在正确的线程中调用它),然后将循环放在此处,然后在该循环中调用QT的ProcessEvents()。这确保QT事件循环得到正确设置。

最新更新