Задать вопрос

QT4: послать сигнал конкретному треду?

Предположим, например, что есть мессенджер — у него серверная часть и клиентская. Каждое клиентское подключение осуществляется в отдельном потоке (QThread). Каждый клиент имеет уникальный идентификатор (например e-mail адрес владельца).


Как я осуществляю передачу сообщения от одного клиента к другому сейчас: каждый тред подписывается на сигнал у сервера. Когда один клиент присылает сообщение, сервер выбрасывает сигнал и все треды смотрят на идентификатор своего клиента — тот тред, у кого он совпадает с адресатом, отправляет сообщение клиенту. Все просто и отлично работает, но у меня подозрения, что это несколько неправильно. Что если клиентов миллионы? Может быть есть более разумный способ?


P.S. Каждый тред имеет также уникальный числовой идентификатор, присваиваемый автоматически при создании. Можно писать в базу соответствие этого ИД и почтового адреса. Но опять же — как послать сигнал треду с конкретным ИД?
  • Вопрос задан
  • 2589 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
IGHOR
@IGHOR Куратор тега Qt
Qt/C++ DEV/CTO
Можно использовать https://doc.qt.io/archives/qt-4.8/qmetaobject.html...
Но надо помнить, если отправить сигнал в несуществующий (удаленный) объект, то будет segmentation fault
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Deimus
@Deimus
Думаю нужно мидифицировать сигнал и сделать его с аргументом целочисленного типа. После этого, посылая сигнал нужно будет указать идентификатор нужного треда. Тред в свою очередь проверит, если значение аргумента полученного сигнала совпадает с его идентификатором — обработает его.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы