子线程中的计时器无法正常工作

时间:2014-04-12 11:53:31

标签: multithreading qt

我已经看过类似的问题,但我的情况与其他情况有所不同。

我有一个main类,用于创建child类的实例。 child类需要有一个计时器来每1毫秒执行一次特定操作。我的问题是 timer 超时操作不会发生。

class mainWindow : public QMainWindow
{
   private:
      child *Child;

   public:
      void action()
      {
          QThread *childThread = new QThread(this);
          Child = new child();
          child->moveToThread(childThread);
          childThread->start();

          Child->action();
      }
}


class child : public QObject
{
Q_OBJECT
protected:
   void timerEvent (QTimerEvent *){/*some code here*/}
public:
   void action()
   {
      this->startTimer(1);
   }
}

任何帮助将不胜感激,

提前谢谢

如果您需要更多信息,请与我们联系

1 个答案:

答案 0 :(得分:0)

必须在该对象的线程中执行child->action调用。有两种方法可以解决它:

  1. 在将child对象移动到其线程之前启动计时器。计时器将在新线程中重新启动。

    QThread *childThread = new QThread(this);
    Child = new child();
    Child->action();  
    Child->moveToThread(childThread);
    childThread->start();
    
  2. action的线程上下文中调用child位置:

    QMetaObject::invokeMethod(child, "action");