gpt4 book ai didi

c++ - (Qt5,线程)我正在关注的示例不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 13:43:25 24 4
gpt4 key购买 nike

抱歉,我没有足够的经验来理解我遇到的错误,我已经尝试了数周以了解问题所在。

我需要完成什么:
运行多个线程以同时控制硬件和测试。

我的代码:
我遵循了提供的示例 here .这个示例在许多其他站点上也可用,因此很明显它必须有效。

在我的 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.


到目前为止我尝试了什么:
如果我注释掉应该关闭 MotorThreadMotorObjconnect 代码,错误就会消失,但显然在长时间运行程序后一次导致它崩溃。我知道这是因为 MotorObjMotorThread 没有关闭。我尝试过其他方法,例如继承 QThread 类,然后重新实现 run() 函数,但这不符合我的要求,也不推荐使用QThread

我哪里出错了???

最佳答案

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。所以在下一个 MotorThread->start() 程序应该崩溃,因为它只是一个悬空指针。但是,即使您删除了最后一个连接,MotorObj 也不再存在,因此插槽可能只被调用一次。

为什么不在不再需要对象后立即调用 deleteLater()!?

关于c++ - (Qt5,线程)我正在关注的示例不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26903173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com