Я создал (несколько) простой сервер 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 «FINISHED» … и она никогда не появляется. Может кто-нибудь объяснить, почему готовый сигнал не излучается после отключения клиента telnet?
Я предполагаю, что вызов thread.disconnectClient () завершает поток … но, возможно, это неверное предположение? Чтобы я должен выйти из цикла exec для потока?
Если вы отключаете работающий поток, и у вас нет надлежащей обработки, не предполагается, что готовый сигнал вызывается, поэтому это нормально.
Вы можете подключить удаление позже или «сигнал» отключения, который вы установили, но вы должны убедиться, что правильно вышли из потока.
Других решений пока нет …