抱歉,我没有足够的经验来理解我遇到的错误,我已经尝试了数周来了解问题所在。
我需要
完成的任务:同时运行多个线程来控制硬件和测试。
我的代码:我按照此处
提供的示例进行操作。此示例在许多其他站点上也可用,因此很明显它必须有效。
在我的main
代码中,我有:
MotorClass *MotorObj = new MotorClass;
QThread *MotorThread = new QThread;
MotorObj->moveToThread(MotorThread);
connect(MotorThread, SIGNAL(started()), MotorObj, SLOT(RunMotor()));
connect(MotorObj, SIGNAL(finished()), MotorThread, SLOT(quit()));
connect(MotorObj, SIGNAL(finished()), MotorObj, SLOT(deleteLater()));
connect(MotorThread, SIGNAL(finished()), MotorThread, SLOT(deleteLater()));
MotorThread->start();
在我的MotorClass.h
我有:
class MotorClass : public QObject
{
Q_OBJECT
public:
explicit MotorClass(QObject *parent = 0);
~MotorClass();
public slots:
void RunMotor();
signals:
void finished();
};
在我的MotorClass.cpp
我有:
MotorClass::MotorClass(QObject *parent) : QObject(parent)
{
}
MotorClass::~MotorClass()
{
}
void MotorClass::RunMotor()
{
qDebug("running");
emit finished();
}
我的问题:
qDebug()
确实显示“正在运行”消息,但随后出现以下输出并且程序崩溃。
QWinEventNotifier: event notifiers cannot be disabled from another thread
QWinEventNotifier: event notifiers cannot be disabled from another thread
QWinEventNotifier: event notifiers cannot be disabled from another thread
The program has unexpectedly finished.
到目前为止我已经尝试了什么:
如果我注释掉connect
应该关闭MotorThread
and的代码,MotorObj
错误就会消失,但显然在一次运行程序很长时间后会导致它崩溃。我知道这是因为MotorObj
andMotorThread
没有被关闭。我尝试过其他方法,比如继承QThread
类然后重新实现run()
函数,但这不符合我的要求,也不是推荐的使用QThread
s.
任何想法我要去哪里错???