Извините, я недостаточно опытен, чтобы понять ошибку, которую я получаю, и вот уже несколько недель я пытаюсь понять, в чем проблема.(Qt5, Threads) Примеры, которые я следую, не работают
ЧТО Я НУЖДАЮТСЯ ДОПОЛНИТЬ:
Запуск нескольких потоков для одновременного управления оборудованием и тестами.
МОЙ КОД:
I Приведенный ниже пример 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()
отображает сообщение «running», но затем за ним следует следующий вывод и сбой программы.
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
и MotorObj
, ошибки исчезают, но, очевидно, после запуска программы в течение длительного времени в то время, причины он разбился. Я понимаю, это потому, что MotorObj
и MotorThread
не закрываются. Я пробовал другие методы, такие как наследование класса QThread
, а затем повторное внедрение функции run()
, но это не касается моих требований, а также не рекомендуется использовать QThread
.
Любые идеи, в которых я ошибаюсь ???
Где вы начинаете свой рассказ (не думайте, что указанная выше строка единственная) и как часто? – Robert
В коде, который вы опубликовали, ничего плохого нет. У вас есть что-то еще? – thuga
Привет. У меня есть MainWindow, работающий как основной поток. Код MainWindow содержит основной код, который вы видите выше. Отсюда я создаю MotorThread и MotorObj.Код, который вы видите выше из моего MainWindow, вызывается только один раз, за исключением MotorThread.start(), который вызывается из цикла for в коде MainWindow. Цикл for повторяется около 5000 раз в течение одного дня. – Achmed