我创建了一个(有点)简单的 telnet 服务器,它为每个连接创建一个新线程:
void TelnetServer::incomingConnection(qintptr socketDescriptor)
{
TelnetConnection *thread = new TelnetConnection(socketDescriptor, this);
connect(thread, SIGNAL(shutdownRequested()), m_controller, SLOT(shutdown()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
}
断开 telnet 客户端后,我希望调用 deleteLater() 插槽。但是,telnet 服务器的 findchildren 显示我的(刚刚断开的)会话的 QThread 对象仍然存在。就好像完成的信号没有发出。
作为一项实验,我将完成的信号与 Qdebug 的“FINISHED”函数联系起来......它永远不会出现。有人可以解释为什么在我断开 telnet 客户端后没有发出完成的信号吗?
我假设调用 thread.disconnectClient() 会终止线程......但也许这是一个不正确的假设?我必须退出线程的 exec 循环吗?