我只是想在共享内存中创建一个循环缓冲区,并在其中执行一些插入和搜索操作。
首先我创建我的类型:
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
答案 0 :(得分:1)
已经很长时间了,但是我认为您在构造它时应该将大小传递给循环缓冲区。像这样:
{{1}}