많은 실험과 stackoverflow에서 배운 후, QObject worker, 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-이>() 시작 (가 실행 것으로 보인다 이후)에 QThread 내 eventloop를 시작한다고 가정합니다. 이제 문제는 ... 스레드를 어떻게 멈추게할까요? 시도 :
QThread::quit();
그러나 응용 프로그램을 종료하면 스레드가 계속 실행 중입니다. exec 루프가 실행되지 않는다는 것을 의미합니까? 이 스레드를 중지하려면 다른 작업을 수행해야합니까? 또는 실제로 중지되었지만 삭제되지 않았습니까?
BTW, 내 대답에서 이전 코드를 사용하고 있습니다. 내가 한 리팩토링을 살펴보고 싶다면 더 이상 QTcpServer에서 파생 될 필요가 없습니다. –