Qt C ++如何moveToThread停止线程

时间:2013-10-10 14:53:19

标签: c++ qt qthread quit

经过大量的实验并从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循环没有运行?我是否必须做其他事来阻止这个帖子?或者它实际上是停止但是没有被删除?

1 个答案:

答案 0 :(得分:-1)

从设计和技术角度来看,杀死正在运行的线程是一个坏主意。 通常,线程必须拥有基于“terminate”标志退出的决定。例如,创建新标志“stop”,如果quit()slot is signaled标记为true。在线程函数中定期验证标志,如果它是真的 - 退出线程函数。

相关问题