繁体   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