Название: Удаление отключенного сокета в многопоточном сервере Отправлено: akaMDA от Май 29, 2012, 15:15 Многопоточный TCP сервер на QT. Каждое новое сединение сохраняется в QHash<int, QTcpSocket*>, где ключем является int QTcpSocket::socketDescriptor(). В процессе работы все нормально, но при удалении сокета (сигнал void QTcpSocket::disconnected()) в слоте приходится переберать все подключения и находить возвращающий -1 int QTcpSocket::socketDescriptor() sender(). Можно ли сделать удаление так, чтобы не было непобхожимости перебирать все подключения?
Название: Re: Удаление отключенного сокета в многопоточном сервере Отправлено: Kurles от Май 29, 2012, 16:24 Код
Название: Re: Удаление отключенного сокета в многопоточном сервере Отправлено: akaMDA от Май 30, 2012, 07:51 Да, я че-то затупил.
Еще вопрос. Слот, вызываемый при сигнале readyRead() от разных сокетов вызывается судя по TID в главном потоке. Надо ди помещать код слота, например, в мьютексы, или одновременного вызовала слота не произойдет? Название: Re: Удаление отключенного сокета в многопоточном сервере Отправлено: navrocky от Май 30, 2012, 11:20 Вызов слота одновременно не произойдет, т.к. между потоками сигналы отрабатывают через очередь сообщений. Но если ты в слоте будешь трогать внутренние данные потока, то наверное их надо защитить.
|