我即将在xulrunner扩展(组件)和插件(NPAPI)之间使用共享内存进行进程间通信(显然;)。两者都是用C ++编写的!
的说明操作现在:通过这样做,共享内存的创建工作正常:
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 ++等)在路径中打开文件,那就不能,因为它断言该文件不存在。
谢谢你的时间!!!
答案 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");
之前建立共享内存。
你不应该忘记在你的析构函数中做同样的事情来删除它!