2014-07-04 16 views
0

我即将使用共享内存进行xulrunner扩展(组件)和插件(NPAPI)之间的进程间通信(显然;)。两者都是用C++编写的!Boost.Interprocess - 创建的managed_shared_memory找不到

我下面的boost lib document

现在说明:共享内存的创建工作正常通过这样做:

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_exception 系统找不到指定的文件

如果我这样做

NS_BI::managed_shared_memory(NS_BI::open_or_create, "MySharedMemory", 1024) ; 

我在用户路径中的第二个文件在完全相同的子目录中。 那么为什么第一个不能被消费者过程找到呢?

顺便说一句:如果我试图用texteditor(notepad ++等)打开路径中的文件,它不能因为它断言该文件不存在。

感谢您的时间!

回答

0

这里是解决方案:

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"); 

权利建立共享内存。

你不应该忘记在你的析构函数中做同样的操作来删除它!