2009-02-24 3 views
2

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

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

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

ответ

4

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

0

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

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

4

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

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

0

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

Смежные вопросы