Связь с постоянным потоком обработки ZeroMQ с помощью Qt - PullRequest
0 голосов
/ 11 июня 2018

У меня есть класс, который наследует от QThread и который обрабатывает сокет подписки ZeroMQ SUB в цикле while (опрос в методе выполнения потока) и уведомляет поток GUI, испуская сигналы, когдаполучение сообщений из сокета.

В этом производном классе QThread перед циклом опроса я также создаю сокет публикации ZeroMQ PUB и существуют методы для его использования.Эти методы используются только в основном потоке (GUI) для отправки данных на сервер.

Это решение работает без каких-либо проблем, но оно не идеально.Я хочу, чтобы только один поток обрабатывал операции подписки и публикации сокетов.Поток GUI (основной) вместо вызова метода производного класса QThread отправит сигнал для запроса публикации данных.

Есть ли хороший пример, основанный на инструментах Qt, для реализации этого?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

В QObject я могу использовать QTimer для обработки опроса сокета подписки и некоторых сигналов / слотов для обработки сокета публикации, а также для настройки сокета подписки потокобезопасным способом.QTimer на самом деле не нужен, я могу иметь бесконечный цикл и при каждом вызове итерации:

QThread::currentThread()->eventDispatcher()->processEvents(QEventLoop::WaitForMoreEvents);

для обработки полученных сигналов.

0 голосов
/ 11 июня 2018

Есть ли хороший пример, основанный на инструментах Qt, для реализации этого?

Ну,

Часть ZeroMQ не имеет проблем собрабатывать одновременно PUB и SUB

Независимо от основной мотивации, движок ZeroMQ здесь не является проблемой.Если заглянуть внутрь проводов и деталей, экземпляры ZeroMQ Context() на самом деле представляют собой пулы потоков, которые предоставляют множество возможностей для настройки производительности и соответствующих приоритетов, отображая экземпляры сокетов в напрямую отображаемые группы ZeroMQ I/O-threads.

Если вы не работаете с ZeroMQ изо дня в день, вы можете наслаждаться 5-секундным чтением основных концептуальных различий, как кратко описано в иерархии [ ZeroMQ вменее чем за пять секунд ] Раздел.

При этом основная проблема заключается в том, как бы вы хотели, чтобы экосистема Qt «говорила» через инфраструктуру ZeroMQ.Учитывая, что в трубопровод добавлен чистый неблокирующий, хорошо спроектированный код, не будет существенного препятствия для того, чтобы позволить ZeroMQ отправлять и собирать сигналы через платформу.

Эффективность передачи сообщений, механика (ультра) с малой задержкой и нулевого копирования удобны и доступны у вас под рукой.Это означает, что плохая идея или неприятный код останутся плохими или неприятными, где фреймворк ZeroMQ не может быть обвинен в «создании неприятностей» :o)

...