У меня есть следующий класс работника:Выхода QThread когда GUI приложения выходят
class MediaWorker : public QObject
{
Q_OBJECT
public:
explicit MediaWorker(QObject *parent = 0);
~MediaWorker();
void Exit();
signals:
void Finished();
public slots:
void OnExecuteProcess();
};
В MediaWorker.cpp
void MediaWorker::Exit()
{
emit Finished();
}
void MediaWorker::OnExecuteProcess()
{
qDebug() << "Worker Thread: " << QThread::currentThreadId();
}
В моей MainWindow я делаю следующее:
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();
резьба работает правильно. Когда я закрываю приложение I прекратить поток в деструкторе:
MainWindow::~MainWindow()
{
delete ui;
this->mediaWorker->Exit();
}
так Выход() испускается Готовое сигнал, который мы надеемся удалить QThread и mediaworker класс.
Вопрос в том, является ли это правильным способом прекращения как рабочего процесса, так и рабочего класса?
Спасибо за образец – adviner
в Qt документации на [QThread] (Http: //doc.qt .io/qt-5/qthread.html # terminate) также предоставляет простой пример использования, включая предпочтительную процедуру запуска и выхода. – m7913d