2017-08-25 47 views
1

我在写实时数据来提升共享内存。起初,我用这个,我要访问的SHM每次:提升进程间共享内存open_or_create每次都会抛出异常

boost::interprocess::managed_shared_memory segment(boost::interprocess::open_or_create, "MySharedMemory",20000000); 

在调试模式下,我发现,这个调用总是抛出此异常:

First-chance exception at 0x00007FFA30BB95FC in testerud.exe: Microsoft C++ exception: boost::interprocess::interprocess_exception at memory location 0x000000000550E1C0. 

但我能够打开和推我的数据共享内存。我发现了这个问题。我在过程开始时创建了另一个函数open_or create,然后每次使用open_only写入。没有例外。

我很好奇背后的原因。

+0

“在调试模式下,我发现这个调用总是抛出这个异常” - 如果你声明它的频率是如何的,那么_always_失败? – sehe

+0

另外,如果没有其他线程/进程,为什么每次都打开该段?只要保持该部分打开。否则“实时”很快就会成为说“狗慢”的好方法 – sehe

+0

是的,它在这里不相关。我将删除它。谢谢。 – brownKnight

回答

1

从升压文档:

管理的内存段也通过提供用于调试的目的构建的命名和独特的对象进行迭代的可能性。 注意:此迭代不是线程安全的,因此用户应该确保没有其他线程正在操作段中的命名索引或唯一索引(创建,删除,保留......)。其他不涉及索引的操作可以并发执行(例如,原始内存分配/释放)。

+0

好的谢谢,但没有其他线程或进程访问它。即使情况如此,open_only和open_or_create会有什么不同。 – brownKnight