QTcpSocket的QThread没有发出完成的信号

时间:2013-10-05 04:45:45

标签: c++ qt qtcore qt-signals qtnetwork

我创建了一个(有点)简单的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循环吗?

1 个答案:

答案 0 :(得分:1)

如果断开正在运行的线程,并且没有经过适当的处理,则不应该调用完成的信号,所以这是正常的。

您可以稍后连接删除或您建立的断开连接“信号”,但您需要确保正确退出该线程。