Круговой буфер в Qt

Каков наилучший способ создать кольцевой буфер в Qt?
Я бы просто сделал что-то вроде этого:

vidoudpsocket.h

typedef struct
{
CircularBuffer *before
quint16 *data;
CircularBuffer *next;
} CircularBuffer;

videoudpsocket.cpp

VideoUDPSocket::VideoUDPSocket(QObject *parent)
: QObject(parent)
{
CircularBuffer buffer0, buffer1, buffer2, buffer3, buffer4, buffer5, buffer6, buffer7;
buffer0.before = buffer7;
buffer0.data = (quint16 *) malloc(16384*16384);
buffer0.next = buffer1;
//...
}

Это хороший способ реализовать это в Qt или есть лучше?

Спасибо!

Редактировать:

Моя первая попытка даже не похоже на работу, компилятор не знает, что делать с CircularBuffer внутри структуры.

Я сейчас пытаюсь использовать QVector, но я уже получил Error allocating memory for data[i]-Debug-сообщение (при i> 7809).

#define MAXNUMBERRANGEBINS 8192
QVector<quint8**> ringBuffer;
ringBuffer.resize(8);
foreach(quint8** data, ringBuffer)
{
data = (quint8**) malloc(MAXNUMBERRANGEBINS*2*sizeof( quint8* ));
if(data == NULL)
qDebug() << "Error allocating memory for data";
for(int i = 0; i < MAXNUMBERRANGEBINS*2; i++)
{
data[i] = (quint8*) malloc(MAXNUMBERRANGEBINS*2);
if(data[i] == NULL)
qDebug() << "Error allocating memory for data[" << i << "]";
}
}

Edit2 Если я рассчитал правильно, мой массив размером около 270 МБ на буфер, это должно объяснить ошибку выделения памяти, я прав?

0

Решение

Не используйте самодельные связанные списки.
Прямой доступ легче понять и отладить.

     QVector<uint16_t*>(8) ringBuffer;
foreach(uint16_t* data, ringBuffer){
data = new(1024);
}

size_t index = 0;

//Access
while(true)
{

memcpy(ringBuffer[index],yourSource, 1024);
index = (index +1) % 8;
}
0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector