Ich habe folgende Arbeiter Klasse:Beenden QThread wenn GUI-Anwendung verlässt
class MediaWorker : public QObject
{
Q_OBJECT
public:
explicit MediaWorker(QObject *parent = 0);
~MediaWorker();
void Exit();
signals:
void Finished();
public slots:
void OnExecuteProcess();
};
In MediaWorker.cpp
void MediaWorker::Exit()
{
emit Finished();
}
void MediaWorker::OnExecuteProcess()
{
qDebug() << "Worker Thread: " << QThread::currentThreadId();
}
In meinem Mainwindow ich folgendes:
this->threadMediaWorker = new QThread();
this->mediaWorker = new MediaWorker();
this->timerMediaWorker = new QTimer();
this->timerMediaWorker->setInterval(1000);
this->timerMediaWorker->moveToThread(this->threadMediaWorker);
this->mediaWorker->moveToThread(this->threadMediaWorker);
connect(this->threadMediaWorker, SIGNAL(started()), this->timerMediaWorker, SLOT(start()));
connect(this->timerMediaWorker, &QTimer::timeout, this->mediaWorker, &MediaWorker::OnExecuteProcess);
connect(this->mediaWorker, &MediaWorker::Finished, this->threadMediaWorker, &QThread::quit);
connect(this->mediaWorker, &MediaWorker::Finished, this->mediaWorker, &MediaWorker::deleteLater);
connect(this->threadMediaWorker, &QThread::finished, this->mediaWorker, &QThread::deleteLater);
this->threadMediaWorker->start();
Die Threading funktioniert ordnungsgemäß. Wenn ich die Anwendung schließe ich den Thread im destructor beenden:
MainWindow::~MainWindow()
{
delete ui;
this->mediaWorker->Exit();
}
so Exit(), um die Fertig-Signal aussendet, das hoffentlich die QThread und mediaworker Klasse löschen.
Meine Frage ist, ob dies der richtige Weg ist, sowohl die Thread- als auch die Media-Worker-Klasse zu beenden?
Danke für die Probe – adviner
die Qt-Dokumentation von [QThread] (http: //doc.qt .io/qt-5/qthread.html # terminate) bietet auch ein klares Anwendungsbeispiel einschließlich der bevorzugten Start- und Beendigungsprozedur. – m7913d