Я создал (несколько) простой 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(). Однако findchildren сервера telnet показывает, что мой объект QThread для (только что отключенного) сеанса все еще существует. Это как если бы готовый сигнал не излучался.
В качестве эксперимента я привязал готовый сигнал к функции, которую Qdebug "ЗАВЕРШИЛ"... и она никогда не появляется. Может ли кто-нибудь объяснить, почему готовый сигнал не излучается после отключения клиента telnet?
Я предполагаю, что вызов thread.disconnectClient() завершает поток... но, возможно, это неверное предположение? Мне нужно выйти из цикла выполнения для потока?