Boost.Interprocess - 找不到创建的managed_shared_memory

时间:2014-07-04 09:52:12

标签: c++ boost xulrunner boost-interprocess

我即将在xulrunner扩展(组件)和插件(NPAPI)之间使用共享内存进行进程间通信(显然;)。两者都是用C ++编写的!

我按照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 :: interprocess_exception 系统无法找到指定的文件

如果我这样做

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

我在完全相同的子目录中的Users路径中获得第二个文件。 那么为什么消费者流程找不到第一个呢?

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

谢谢你的时间!!!

1 个答案:

答案 0 :(得分:0)

以下是解决方案:

struct shm_remove
{
    shm_remove() { NS_BI::shared_memory_object::remove("MySharedMemory"); }
   ~shm_remove() { NS_BI::shared_memory_object::remove("MySharedMemory"); }
} remover;

是boost文档中的原始代码。如果这个例子很有效。但就我而言(说实话,我不确定为什么)我必须致电

NS_BI::shared_memory_object::remove("MySharedMemory");

之前建立共享内存。

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