先貼個頭文件的設計:
首先緩沖區中沒有任何數據時,nIdWrite、nIdRead讀寫下標都為0。
為了判斷緩沖區中是否還有數據可讀或者可寫,我判斷的依據是:
1)當nIdWrite 等於 nIdRead時,表示緩沖區內沒有任何數據可讀;否則存在可讀的數據
2)當剩余的空間小於我們所需要的空間時,表示緩沖區不能再繼續寫數據,否則可以進行寫數據
3)這里說明一下,當剩余空間 等於 我們所需要的空間時,實際上也可以進行寫數據的, 只不過需要用一個標記來標記緩沖區是否有數據。
否則,這個時候nIdWrite ** 等於 **nIdRead, 無法區分緩沖區到底是有數據還是滿了的情況!
//C++編寫了一個環形緩沖區,實際上是用數組來進行模擬。
#pragma once class RingBuffer { public: RingBuffer(); ~RingBuffer(); public: char* createRingBuf(int nByteSize); bool writeRingBuf(char* ringBuf, char* pSrc, int nByteSize); bool readRingBuf(char* ringBuf, char* pBuffer,int &nByteSize); private: bool isCanRead(char* ringBuf);// 判斷是否可以再進行讀操作 bool isCanWrite(char* ringBuf, int nByteSize);// 判讀剩余的空間是否能夠容納nByteSize字節的數據 int getFreeOfRingBuf(char* ringBuf);// 計算剩余的空間大小 int getBytesOfRingBuf(char* ringBuf);/*從環形緩沖區獲取可寫字節數*/ int flushRingBuf(char* ringBuf);/*清環形緩沖區空間*/ private: int m_nIdWrite; // 讀下標標記 int m_nIdRead; // 寫下標標記 };
參考鏈接:
https://www.cnblogs.com/dodng/p/4367791.html