визуальное создание кольцевого буфера в разделяемой памяти в переполнении стека

Я просто пытаюсь создать кольцевой буфер в разделяемой памяти и выполнить в нем некоторые операции вставки и поиска.

Итак, сначала я создаю свои типы:

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?), и я не могу вставить любой предмет на контейнере.

Когда я пытаюсь сбросить контейнер, он даже не входит в цикл for, поскольку в нем нет вставленного элемента.

У вас есть идеи о том, что здесь не так?

Спасибо большое…

Примечание: я использую Visual Studio 2008 VC ++, Win7 x64

2

Решение

Это было давно, но я думаю, что вы должны передать размер в кольцевой буфер при его создании. Что-то вроде:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]