Qt C ++, как остановить поток, если moveToThread

После долгих экспериментов и изучения стекового потока я создал рабочий QObject, QThread, переместил свой рабочий QObject в мой QThread и запустил QThread — и он работает!

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 () запускает цикл события в QThread (так как он, кажется, выполняется). Теперь проблема … как мне остановить поток? Я старался:

QThread::quit();

но поток все еще работает, когда я закрываю приложение. Означает ли это, что цикл exec не запущен? Должен ли я сделать что-то еще, чтобы остановить эту тему? Или это на самом деле остановлено, но просто не удалено?

1

Решение

Это плохая идея, чтобы убить работающий поток, с точки зрения дизайна и техники.
Обычно поток должен владеть решением о выходе, основываясь на флаге «завершить». Например, создайте новый флаг «stop», если слот quit () сигнализируется, отметьте флаг как истинный. В поточной функции периодически проверяйте флаг, и если он истинный — выходите из поточной функции.

-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]