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:是的,您是对的,这只是我在这里编写的示例代码,我将对其进行更改:)