Что такое облегченный механизм IPC на основе разделяемой памяти в C / C ++ для Windows? - PullRequest
2 голосов
/ 07 декабря 2010

Сейчас я работаю над несколькими проектами C ++, которые включают в себя несколько простых IPC с использованием оконных сообщений. В ряде случаев некоторые дополнительные данные передаются с оконными сообщениями, помещая данные в сегмент совместно используемой памяти, а затем передавая указатель в разделяемую память с помощью вызова SendMessage . Повторять это все время раздражает, но прежде чем разрешить это скучное повторение, изобретая еще одну систему IPC, я хотел бы спросить:

Существует ли существующая структура, которая удовлетворяет критериям?:

  • Написано на C или C ++ (здесь мы используем MSVC)
  • Как можно меньше зависимостей; в лучшем случае это всего лишь несколько исходных файлов, которые используют обычные стандартные библиотеки C ++ и Windows и которые можно скомпилировать непосредственно в приложение / библиотеку.
  • Работает в Windows XP и новее
  • Построен на оконных сообщениях плюс сегмент общей памяти
  • Правильное сообщение об ошибке было бы очень желательно (удаленный процесс исчез, удаленный процесс не понимает данное сообщение, несоответствие аргумента и т. Д.)

Для чего бы то ни было, COM на самом деле не вариант для нас, так как с ним так больно работать (если только вы не начнете использовать всевозможные обертки поверх него, которых мы бы хотели избежать). Мне действительно не нужны интерфейсы и все такое; просто удобный способ отправки сообщений с (в лучшем случае произвольными) аргументами туда-сюда с небольшой обработкой ошибок. Кроме того, я отказался от DBUS за то, что он сделал гораздо больше, чем мне нужно.

Ответы [ 3 ]

3 голосов
/ 12 декабря 2010

Я успешно использовал файл отображения памяти для межпроцессного взаимодействия. Мне это нравится в основном потому, что оно простое, быстрое и доступно для любой версии Windows, с которой вы, вероятно, столкнетесь (ну, я сомневаюсь, что это будет работать на Win9x, но ....)

В http://msdn.microsoft.com/en-us/library/ms810613.aspx есть статья (написана в 1993 году!), В которой показано, как их использовать.

2 голосов
/ 29 августа 2013

На момент ответа на этот вопрос почти 3 года, но я не могу поверить, что никто официально не предложил Boost.Interprocess .

Доступны облегченные обертки, IPC и C ++ для механизмов WINAPI.

2 голосов
/ 07 декабря 2010

Хотя не соответствует всем вашим критериям, ZeroMQ (http://www.zeromq.org/) может стоить посмотреть. Он небольшой, простой и быстрый. Также он дает вам семантику передачи сообщений, которая может помочь в зависимости от типа приложений вы используете

...