1

经过大量的实验和从 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 中的事件循环(因为它似乎正在运行)。现在的问题......我如何停止线程?我试过了:

QThread::quit();

但是当我关闭应用程序时线程仍在运行。这是否意味着 exec 循环没有运行?我必须做其他事情来停止这个线程吗?还是它实际上已停止但没有删除?

4

1 回答 1

-1

从设计和技术的角度来看,杀死正在运行的线程是一个坏主意。通常线程必须拥有基于“终止”标志退出的决定。例如,创建新标志“停止”,如果发出退出()槽的信号,则将该标志标记为真。在线程函数中定期验证标志,如果为真 - 退出线程函数。

于 2013-10-10T15:06:07.573 回答