經過大量的實驗和從stackoverflow學習,我創建了一個QObject worker,一個QThread,並將我的QObject worker移動到我的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()方法的的QThread內啓動事件循環(因爲它似乎運行)。現在的問題......我該如何阻止線程?我嘗試過:
QThread::quit();
但是當我關閉應用程序時線程仍在運行。這是否意味着exec循環沒有運行?我需要做其他事情來阻止這個線程嗎?或者它實際上停止了,但沒有被刪除?
順便說一句,你使用我的答案中的舊代碼,你可能想看看我已經完成的重構,你不需要從'QTcpServer'中得到:) –