📄 cbuffer.h
字号:
/********************************************************
CBuffer.h -- Head File of Buffer Class
********************************************************/
class CBuffer
{
public:
unsigned char * m_chBody;
CBuffer(int nUnitSize, int nUnitNum, BOOL bSem, int nTimeOut = -1);
//bSem 是否使用信号量,nTimeOut信号量超时时间 -1为一直等待
~CBuffer();
int PutTo(unsigned char * Source, int nSourceSize, int nFree = 1);
//返回值为真正填入的长度,不阻塞,nFree表示当还有多少单元空间空闲时执行填写操作
// int Append(unsigned char * Source, int nSourceSize, BOOL bFinish);//从上一次填充指针继续填写,到bFinish和溢出更新指针
int GetFrom(unsigned char *Dest, int nDestSize);//返回值为真正读出的长度
// int Peer()
BOOL Unlock();//用来将等待的任务开启
BOOL Clear();
BOOL NewSize(int nNewUnitSize, int nNewUnitNum);
//UINT & Timer()
//{
// return m_nTimer;
//}
protected:
HANDLE m_hSemaphore;//表示缓冲区不空,用来控制读取
HANDLE m_hMutexRead, m_hMutexWrite;//用来互斥多个线程同时读或者同时写
int m_nUnitSize;
int m_nUnitNum;
int m_nHead;
int m_nTail;
int m_nCurrent;
//UINT m_nTimer;
int m_nTimeOut;
inline int INC(int a){return ((a>=m_nUnitNum)?0:(a+1));}
inline BOOL IsEmpty(){return (m_nHead == m_nTail);}
inline BOOL IsFull()
{
// int a = (INC(m_nHead));
return((INC(m_nHead)) == m_nTail);
}
// inline INCPLUS(int a,int n){if(a>= (m_nUnitNum+1-n))a+=(n-m_nUnitNum-1);else a+=n;}
inline int USED()
{
return (m_nHead < m_nTail)?
(m_nHead+m_nUnitNum+1-m_nTail):(m_nHead-m_nTail); //a-chHead,b-chTail
}
inline int FREE()
{
return (m_nHead < m_nTail)?
(m_nTail - m_nHead - 1):((m_nUnitNum) - (m_nHead-m_nTail));
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -