[英]Qt C++ how stop thread if moveToThread
經過大量的實驗和從stackoverflow中學習后,我創建了一個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中啟動eventloop(因為它似乎正在運行)。 現在的問題...我如何停止線程? 我試過了:
QThread::quit();
但當我關閉應用程序時,線程仍在運行。 這是否意味着exec循環未運行? 我是否需要做其他事情才能停止此線程? 還是實際上已停止但並未刪除?
從設計和技術角度來看,殺死正在運行的線程是一個壞主意。 通常,線程必須擁有基於“終止”標志的退出決定。 例如,創建新標志“ stop”,如果發出quit()slot信號,則將該標志標記為true。 在線程函數中,定期驗證該標志,如果它為true,則退出線程函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.