Методы совместного использования экземпляров классов между процессами - PullRequest
2 голосов
/ 24 февраля 2009

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

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

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

Ответы [ 4 ]

4 голосов
/ 24 февраля 2009

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

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

4 голосов
/ 24 февраля 2009

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

1 голос
/ 24 февраля 2009

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

0 голосов
/ 24 февраля 2009

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

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

...