2014-07-04 48 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"); 

權利建立共享內存。

你不應該忘記在你的析構函數中做同樣的操作來刪除它!