После много экспериментов и обучения из stackoverflow я создал работника QObject, QThread и перенес своего работника QObject в свой QThread и начал QThread - и он работает!Qt C++ как остановить поток, если moveToThread
void TelnetServer::incomingConnection(qintptr socketDescriptor)
{
QThread * TelnetConnectionThread = new QThread(this);
TelnetConnection *worker = new TelnetConnection(socketDescriptor,TelnetConnectionThread);
connect(TelnetConnectionThread, SIGNAL(started()), worker, SLOT(start()));
connect(TelnetConnectionThread, SIGNAL(finished()), worker, SLOT(deleteLater()));
worker->moveToThread(TelnetConnectionThread);
TelnetConnectionThread->start(); // Start the thread running
}
Я полагаю, что вызов TelnetConnectionThread-> Start() начинает eventloop в QThread (так как это, кажется, работает). Теперь проблема ... как остановить поток? Я пробовал:
QThread::quit();
но поток все еще работает, когда я завершаю приложение. Означает ли это, что цикл exec не работает? Нужно ли мне что-то делать, чтобы остановить этот поток? Или это фактически остановлено, но просто не удалено?
BTW, вы используете старый код из моего ответа, вы можете посмотреть рефакторинг, который я сделал, вам больше не нужно выводить из 'QTcpServer' :) –