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

时间:2014-03-17 14:26:01

标签: c++ visual-c++ boost shared-memory circular-buffer

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

首先我创建我的类型:

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

1 个答案:

答案 0 :(得分:1)

已经很长时间了,但是我认为您在构造它时应该将大小传递给循环缓冲区。像这样:

{{1}}