簡體   English   中英

Qt 中的循環緩沖器

[英]Circular Buffer in Qt

在 Qt 中創建循環緩沖區的最佳方法是什么? 我會做這樣的事情:

vidoudpsocket.h

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

視頻udpsocket.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-Message (at 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如果我計算正確,我的數組每個緩沖區大約 270MB,這應該可以解釋 memory 分配錯誤,對嗎?

不要使用自制的鏈表。 直接訪問更容易理解,也更容易調試。

     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;
     }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM