⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cbuffer.h

📁 一个vxworks开发的snmp的程序
💻 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 + -