Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 子线程中的计时器不工作_Multithreading_Qt - Fatal编程技术网

Multithreading 子线程中的计时器不工作

Multithreading 子线程中的计时器不工作,multithreading,qt,Multithreading,Qt,我见过类似的问题,但我的情况与其他人有点不同 我有一个main类,它创建了子类的一个实例。子类需要一个计时器,以便每1毫秒执行一次特定操作。我的问题是计时器超时操作没有发生 class mainWindow : public QMainWindow { private: child *Child; public: void action() { QThread *childThread = new QThread(this);

我见过类似的问题,但我的情况与其他人有点不同

我有一个
main
类,它创建了
子类的一个实例。
子类
需要一个计时器,以便每1毫秒执行一次特定操作。我的问题是计时器超时操作没有发生

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);
   }
}
任何帮助都将不胜感激

先谢谢你


如果您需要更多信息,请告诉我。

必须在该对象的线程中执行
子->操作
调用。有两种方法可以解决此问题:

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

    QThread *childThread = new QThread(this);
    Child = new child();
    Child->action();  
    Child->moveToThread(childThread);
    childThread->start();
    
  • 调用
    子线程上下文中的
    操作
    插槽:

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

  • NITPoice,但是C++中的一个叫做“Mault”的类?我相信您知道,它也是应用程序中入口点的名称(即主函数)。如果您可以使用“mainwindow”,这似乎是一种常见的命名模式,那就更好了。@LaszloPapp:是的,您是对的,这只是我在这里编写的示例代码,我将对其进行更改:)