Проблемы с boost.interprocess для двунаправленного обмена сообщениями с использованием message_queue - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь внедрить систему обмена сообщениями между двумя процессами с помощью boost.interprocess и message_queue.

Первая проблема: одну очередь можно использовать только для отправки сообщений из процесса А в В, а не из В в А.

Таким образом, я использую две очереди в обоих процессах. Процесс A прослушивает / получает в Queue-A и отправляет в Queue-B; Процесс B прослушивает / получает в очереди-B и отправляет в очереди-A.

Я не могу заставить систему работать с обеими очередями. В зависимости от порядка процессов, вызывающих boost::interprocess::message_queue(boost::interprocess::open_or_create,...) или

boost::interprocess::message_queue(boost::interprocess::open_only,...)

либо одна Очередь работает, либо другая, либо ни одна.

Даже если Процесс A создает Очередь-A и Очередь-B, а Процесс B открывает только Очередь-A и Очередь-B. В одном направлении boost :: interprocess застревает в функции receive и никогда не просыпается.

1) Можно ли заставить двунаправленный обмен сообщениями / сигнализацию работать с interprocess :: message_queue, используя две очереди в каждом процессе? 2) Есть ли лучший способ получить двунаправленный обмен сообщениями без использования message_queue?

1 Ответ

0 голосов
/ 27 января 2019

Я не получил никаких комментариев по этому поводу. Решением было не использовать boost :: interprocess :: message_queue. С помощью boost / interprocess / shared_memory_object я сам написал новую простую библиотеку для однонаправленного межпроцессного обмена сообщениями. https://github.com/svebert/InterprocessMsg

...