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

时间:2012-10-24 17:00:35

标签: qt signals-slots qthread

我有一个派生自QThread: class MyClass : public QThread的类。在run方法中,我有“我自己的”消息循环:

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

由于exec()未执行,我有没有 Qt事件循环。这显然会导致信号/时隙not to work correctly有没有机会将Qt和我自己的消息循环结合起来?或者我是否需要经常启动计时器才能完成我在无限循环中完成的任务?

2 个答案:

答案 0 :(得分:1)

“Qt-wise”的正确方法是使用计时器让Qt管理事件循环。

如果您需要依赖外部事物,您可以使用QAbstractSocket之类的东西在数据通过外部套接字进入时发送事件,例如。

答案 1 :(得分:1)

这不是正确实现事件循环的答案,我相当确定有一种方法,但更多的解决方法:

正常启动线程,exec()和all,并将启动信号连接到插槽(确保在正确的线程中调用它),然后将循环放在那里,并在该循环中调用Qt的processEvents()。这样可以确保正确设置Qt事件循环。