【发布时间】:2013-10-05 04:45:45
【问题描述】:
我创建了一个(有点)简单的 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 循环吗?
【问题讨论】:
-
finished() 在 run() 结束后立即发出。如果 run() 永远不会返回,则不能期望finished() 触发。在此处查看相关文档:http://qt-project.org/doc/qt-5.0/qtcore/qthread.html#finished
标签: c++ qt qtcore qt-signals qtnetwork