我创建了一个(有点)简单的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的“完成”的功能......它永远不会出现。有人解释为什么在我断开telnet客户端之后,完成的信号没有发出?
我假设调用thread.disconnectClient()终止线程......但也许这是一个不正确的假设?我必须退出该线程的exec循环吗?
答案 0 :(得分:1)
如果断开正在运行的线程,并且没有经过适当的处理,则不应该调用完成的信号,所以这是正常的。
您可以稍后连接删除或您建立的断开连接“信号”,但您需要确保正确退出该线程。