Qt中的循环缓冲区

问题描述 投票:0回答:1

在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,但我总是得到qazxsw poi-Debug-Message(在i> 7809)。

Error allocating memory for data[i]

Edit2如果我计算得对,我的数组每个缓冲区大约270MB,这应该解释内存分配错误,对吗?

c++ qt buffer circular-buffer
1个回答
0
投票

不要使用自制链表。直接访问更容易理解,也更容易调试。

#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 << "]";
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.