簡體   English   中英

Qt C ++如果moveToThread如何停止線程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM