QThread QTcpSocket не излучает завершенный сигнал

Я создал (несколько) простой сервер 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 для потока?

0

Решение

Если вы отключаете работающий поток, и у вас нет надлежащей обработки, не предполагается, что готовый сигнал вызывается, поэтому это нормально.

Вы можете подключить удаление позже или «сигнал» отключения, который вы установили, но вы должны убедиться, что правильно вышли из потока.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]