三、核心代碼
a) BUF結(jié)構(gòu)體
typedef struct tagSENDBUF
{ long buffertime; //記錄數(shù)據(jù)的時(shí)間
LPBYTE sendbuf; //記錄數(shù)據(jù)的起始地址
unsigned long buflength; //記錄數(shù)據(jù)的長(zhǎng)度
}SENDBUF,*pSendBuf;
b) 通道單元的成員變量
LPBYTE m_DataBufCache; //緩沖區(qū)指針
CArray<SENDBUF,SENDBUF&> m_data_buffer; //動(dòng)態(tài)數(shù)組
LPBYTE m_NowBufCache; //內(nèi)存地址,當(dāng)前寫到哪了
int m_Valid_pos; //有效位置。超過(guò)這個(gè)位置為無(wú)效數(shù)據(jù);
int m_BufCount; //數(shù)組的個(gè)數(shù)
int m_read_pos; //記錄數(shù)組中,該從第幾個(gè)開始寫
c) 填充緩沖區(qū)代碼
MULTIBUFSIZE是個(gè)常量,指申請(qǐng)內(nèi)存的大小。
if ((m_NowBufCache-m_DataBufCache)+dwBufSize>MULTIBUFSIZE)
{
//////////////////////////////////////
//把m_read_pos置為0
//////////////////////////////////////
}
//如果m_BufCount<m_read_pos+1,則需要?jiǎng)討B(tài)建一個(gè)SENDBUF
//,記錄要記錄的信息,并加入到數(shù)組中
if (m_BufCount<m_read_pos+1)
{
SENDBUF _sendbuf;
//////////////////////////////////////
//記錄要記錄的信息/
//////////////////////////////////////
m_data_buffer.Add(_sendbuf);
m_BufCount=m_read_pos+1;
}
else
{
/////////////////////////////////////////////
//取出m_data_buffer[m_read_pos],
//然后修改其中的內(nèi)容
/////////////////////////////////////////////
}
m_read_pos++; //把數(shù)組寫位置指向下一個(gè)位置
四、具體應(yīng)用
使用緩沖區(qū):
m_Binding_Channel是指綁定的一個(gè)數(shù)據(jù)流通道。
m_write_pos是指讀通道數(shù)組里的第幾個(gè)SENDBUF。
//如果超過(guò)有效位置,則從第0個(gè)開始讀
if (m_write_pos>m_Binding_Channel->m_Valid_pos)
{
m_write_pos=0;
}
//檢驗(yàn)m_Binding_Channel->m_data_buffer[m_write_pos]里數(shù)據(jù)的合法性
//比如時(shí)間,BUG大小等是否符合要求
然后就可以使用m_Binding_Channel->m_data_buffer[m_write_pos]里面記錄的信息了。
銳虎科技 研發(fā)部
銳虎科技,專注安防監(jiān)控平臺(tái)軟件設(shè)計(jì)