備份兩種重複利用記憶體,避免頻繁申請記憶體的方法。
databuffer.h
#ifndef databuffer_h
#define databuffer_h
#define buffer_size 1024 //初始緩衝區大小
class databuffer
;#endif // databuffer_h
databuffer.cpp
#include "databuffer.h"
#include "string.h"
#include //構造
databuffer::databuffer()
//析構
databuffer::~databuffer()
//獲得緩衝區中資料大小
int databuffer::getdatalen()
//重置緩衝區大小
bool databuffer::rebuffersize(int nlen)
m_pbuffer = new char[m_nbuffersize]; //分配新緩衝區
memset(m_pbuffer, 0, sizeof(m_pbuffer));
memcpy(m_pbuffer, obuffer, m_noffset); //將原緩衝區中的內容拷貝到新緩衝區
delete obuffer; //釋放原緩衝區
}catch(qexception e)
return true;
} /*
*功 能:向緩衝區中新增訊息
*參 數:pbuf:要新增的資料
* nlen:資料長度
*返回值:成功失敗
*/bool databuffer::addmsg(char *pbuf, int nlen)
catch(qexception e)
return true;}/*
*功 能:從緩衝區中取資料
*參 數:pbuf:二級指標,用於儲存取出的資料
* nlen:要取的資料長度
*返回值:無
*/void databuffer::popmsg(char **poutbuf, int nlen)
poll(nlen);
}//緩衝區復位
void databuffer::reset()
}//移除緩衝區首部第乙個資料報
//nlen:乙個資料報的大小
void databuffer::poll(int nlen)
}
databuffer.h
#ifndef netdatabuffer_h
#define netdatabuffer_h
#define buffer_size 1024 //初始緩衝區大小
class databuffer
;#endif // netdatabuffer_h
databuffer.cpp
#include "databuffer.h"
#include "string.h"
//#include //構造
databuffer::databuffer()
//析構
databuffer::~databuffer()
//獲得緩衝區中資料大小
int databuffer::getdatalen()
else if (m_nend < m_nstart)
else }
//重置緩衝區大小
bool databuffer::rebuffersize(int nlen)
m_pbuffer = new char[m_nbuffersize]; //分配新緩衝區
memset(m_pbuffer, 0, sizeof(m_pbuffer));
//將原緩衝區中的內容拷貝到新緩衝區
if (m_nstart < m_nend)
else
deleteobuffer; //釋放原緩衝區
return true;}/*
*功 能:向緩衝區中新增訊息
*參 數:pbuf:要新增的資料
* nlen:資料長度
*返回值:無
*/bool databuffer::addmsg(char *pbuf, int nlen)
if (getdatalen() + nlen > m_nbuffersize) //如果緩衝區過小,重新調整其大小
else if (m_nstart <= m_nend)
else
}else
m_isempty = false;
return true;
}//緩衝區復位
void databuffer::reset()}/*
*功 能:從緩衝區中取資料
*參 數:pbuf:二級指標,用於儲存取出的資料
* nlen:要取的資料長度
*返回值:無
*/void databuffer::popmsg(char **poutbuf, int nlen)
if (m_nstart < m_nend)
else
else
if (nlen <= rightlen) //如果資料報大小 < 緩衝區右面的資料
else
}poll(nlen);
}//移除緩衝區首部第乙個資料報
//nlen:乙個資料報的大小
void databuffer::poll(int nlen)
if (m_nstart < m_nend)
else
else
if (nlen <= rightlen) //如果資料報大小 < 緩衝區右面的資料
else
}}
借鑑 環形緩衝區
include include include include include define buffsize 1024 1024 define min x,y x y x y pthread mutex t lock pthread mutex initializer struct cycle b...
環形緩衝區
define print buf size 16 1024 static char g pcnetprintbuf 環形緩衝區的首位址 static int g ireadpos 0 環形緩衝區讀的位置 static int g iwritepos 0 環形緩衝區寫的位置 intinit 判斷環形緩...
環形緩衝區
環形緩衝區要維護兩個索引,分別對應寫入端 w 和讀取端 r 寫入 push 的時候,先確保環沒滿,然後把資料複製到 w 所對應的元素,最後 w 指向下乙個元素 讀取 pop 的時候,先確保環沒空,然後返回 r 對應的元素,最後 r 指向下乙個元素。上述的操作並不複雜,不過有乙個小小的麻煩 空環和滿環...