[英]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.