Сначала всего, вы должны установить родительский элемент для Worker
, чтобы сделать его дочерним по отношению к другому QObject
, правильно очистить его после завершения работы приложения и создать его в куче. то есть динамический путь.
Второй , самый простой способ сделать то, что вы хотите, это определить слот, который будет устанавливать логический член объекта Worker
, и проверять его в каждом цикле, чтобы разорвать бесконечный цикл. Не забудьте подключить этот слот к нужному сигналу.
, чтобы вы могли вставить конструктор Server
по линиям
QThread * worker = new QThread (this);
connect (this, SIGNAL(terminator()), worker, SLOT(terminate()));
в Server
объявление класса:
signals:
terminator();
в классе Worker
:
private:
bool terminate_; // don't forget initialize it to false
public slots:
void terminate(){terminate_ = true;}
и в цикле:
if (terminate_) {/* .. do exit things...*/; return;
после этого отправляйте сигнал terminator()
с сервера всякий раз, когда вам нужно.
Если вам потребуется более сложное управление, чем простая остановка, вам, вероятно, потребуется защитить переменную состояния с помощью мьютекса.