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

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

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

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


person CiscoIPPhone    schedule 24.02.2009    source источник


Ответы (4)



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

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

person Jason S    schedule 24.02.2009

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

person Marc    schedule 24.02.2009

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

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

person dirkgently    schedule 24.02.2009