Я собираюсь использовать разделяемую память для межпроцессного взаимодействия (очевидно;) между расширением xulrunner (компонент) и плагином (NPAPI). Оба написаны на C ++!
Я следовал инструкциям повысить документ lib
Теперь: создание общей памяти работает нормально, выполнив это:
struct shm_remove
{
shm_remove() { NS_BI::shared_memory_object::remove("MySharedMemory"); }
~shm_remove() { NS_BI::shared_memory_object::remove("MySharedMemory"); }
} remover;_myShMemSegment = NS_BI::managed_shared_memory( NS_BI::open_or_create, "MySharedMemory", 65536 ) ;
SHMEM_ALLOCATOR alloc_inst( _myShMemSegment.get_segment_manager() ) ;
_pMyShMemMap = _myShMemSegment.construct<SHMEM_MAP>("cgfMap")
(std::less<int>()
, alloc_inst) ;
Путь
C:\Users\All Users\boost_interprocess\<aNumber>\
показывает мне загадочный файл с именем, во время процесса работает. При закрытии программы этот файл удаляется. Все идет нормально.
Я пытаюсь открыть эту общую память в другом процессе с помощью:
NS_BI::managed_shared_memory( NS_BI::open_read_only, "MySharedMemory") ;
но затем он вызывает boost :: interprocess :: interprocess_exception Система не может найти указанный файл
Если я сделаю
NS_BI::managed_shared_memory( NS_BI::open_or_create, "MySharedMemory", 1024) ;
Я получаю второй файл в пути Users в том же подкаталоге.
Так почему же первое не может быть найдено потребительским процессом?
Кстати: если я пытаюсь открыть файл в пути с помощью текстового редактора (notepad ++ и т. Д.), Он не может этого сделать, поскольку утверждает, что файл не существует.
Спасибо за ваше время!!!
Вот решение:
struct shm_remove
{
shm_remove() { NS_BI::shared_memory_object::remove("MySharedMemory"); }
~shm_remove() { NS_BI::shared_memory_object::remove("MySharedMemory"); }
} remover;
это оригинальный код из буст документации В случае с примером, который работал отлично. Но в моем случае (если честно, я не уверен, ПОЧЕМУ) я должен позвонить
NS_BI::shared_memory_object::remove("MySharedMemory");
прямо перед тем, как создать общую память.
Вы не должны забывать делать то же самое в своем деструкторе, чтобы удалить его!