Методы совместного использования экземпляров класса между процессами

StackOverflow https://stackoverflow.com/questions/581773

  •  06-09-2019
  •  | 
  •  

Вопрос

Я написал класс C ++, экземпляр которого мне нужно совместно использовать по крайней мере между двумя процессами Windows.Каковы различные способы сделать это?

Первоначально я изучил #прагма data_seg данных только для того, чтобы быть разочарованным, когда я понял, что это не будет работать с классами или с чем-либо, что размещается в куче.

Экземпляр класса должен быть доступен через dll, поскольку существующие готовые приложения уже используют эту dll.

Это было полезно?

Решение

Потенциально вы можете использовать файлы, отображенные в памяти для обмена данными между процессами.Если вам нужно вызвать функции для вашего объекта, вам придется использовать COM или что-то подобное, или вам придется реализовать свой собственный протокол RPC.

Другие советы

Загляни в Boost::межпроцессный.К этому нужно немного привыкнуть, но работает это очень хорошо.Я создал относительно сложные структуры данных в общей памяти, которые прекрасно работали между процессами.

Редактировать:это также работает с файлами, отображенными в памяти.Дело в том, что вы можете использовать данные структурированным образом;вам не нужно рассматривать блоки памяти (в файлах или общей памяти) как просто необработанные данные, которые вы должны тщательно прочитать / записать, чтобы оставить в допустимом состоянии.Boost::interprocess позаботится об этой части, и вы можете использовать контейнеры STL, такие как деревья, списки и т.д.

Вы можете использовать placement new для создания объекта в зоне общей памяти.Пока объект не использует никаких указателей, это могло бы быть нормально.

Это модуль или вам нужно иметь возможность совместно использовать один экземпляр для всех процессов?Рассматривали ли вы возможность использования шаблона Singleton (версия статической инициализации по соображениям потокобезопасности)?Вам также нужно будет использовать мьютексы для защиты одновременной записи и прочего.

В Windows вы также можете использовать COM.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top