繁体   English   中英

在c ++中创建共享内存中的循环缓冲区

[英]Creating circular buffer in shared memory in c++

我只是想在共享内存中创建一个循环缓冲区,并在其中执行一些插入和搜索操作。

所以首先我创建我的类型:

typedef allocator<MyData, managed_shared_memory::segment_manager> ShmemAllocator;
typedef boost::circular_buffer<MyData,ShmemAllocator> cbMyDataContainerType;

分段和容器的指针:

managed_shared_memory *segment;
cbMyDataContainerType *cbMyDataContainer;

我之前已经成功创建了一个共享内存,并且我已经使用它来共享其他一些对象,所以在这里我找到了之前创建的共享内存并尝试创建循环缓冲区:

segment = new managed_shared_memory(open_only, "MySharedMemory");

const ShmemAllocator alloc_inst (segment->get_segment_manager());   

cbMyDataContainer = segment->construct<cbMyDataContainerType>
    ("MyDataContainerCircularBuffer")(alloc_inst), (CONTAINER_SIZE);

并尝试在此处插入一些值:

cbMyDataContainer->push_back(MyData(id, dataTime));

之后我尝试转储到这样的容器:

int count = 0
for (cbMyDataContainerType::iterator it = cbMyDataContainer->begin(), 
     it_end = cbMyDataContainer->end(); it != it_end; ++it, count++) 
{       
    std::cout << "Id : "<< it->id << " Time : " << it->dTime <<  std::endl;
}

但问题是; 虽然创建容器似乎一切都好(至少没有例外),但它不占用大小(sizeof(cbMyContainer)似乎8但是CONTAINER_SIZE是10000所以它应该像8 * 10000那样smth?)我无法插入容器上的任何物品。

当我尝试转储容器时,它甚至没有进入for循环,因为它中没有插入的项目。

你对这里的错误有什么看法吗?

谢谢......

注意:我使用的是Visual Studio 2008 VC ++,Win7 x64

很长一段时间,但我认为你应该在构造时将大小传递给循环缓冲区。 就像是:

cbMyDataContainer = segment->construct<cbMyDataContainerType>
   ("MyDataContainerCircularBuffer")(CONTAINER_SIZE, alloc_inst);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM