📄 serialbuffer.h
字号:
// SerialBuffer.h: interface for the CSerialBuffer class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SerialBuffer_H__FD164A5F_9F09_451B_8E42_180999B4DB9A__INCLUDED_)
#define AFX_SerialBuffer_H__FD164A5F_9F09_451B_8E42_180999B4DB9A__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <string>
class CSerialBuffer
{
std::string m_szInternalBuffer; //数据缓冲区
CRITICAL_SECTION m_csLock; //临界区
long m_iCurPos; //当前缓冲区指针的位置
long m_alBytesUnRead; //当前缓冲区中未读取得字符
void Init(); //缓冲区初始化
void ClearAndReset(HANDLE& hEventToReset); //当缓冲区的所有字符都已经被读取时调用该函数重置缓冲区和读事件
public:
inline void LockBuffer() {::EnterCriticalSection(&m_csLock );} //进入临界区,锁住buffer
inline void UnLockBuffer() {::LeaveCriticalSection(&m_csLock );} //离开临界区,释放buffer管理权
CSerialBuffer( );
virtual ~CSerialBuffer();
//---- public interface --通用接口函数
void AddData( char ch ) ; //添加数据到缓冲区,即写函数
void AddData( std::string& szData ) ;
void AddData( std::string& szData,int iLen ) ;
void AddData( char *strData,int iLen ) ;
std::string GetData() {return m_szInternalBuffer;}
void Flush(); //清空缓冲区
//读取n个字符的数据
long Read_N( std::string &szData,long alCount,HANDLE& hEventToReset);
//逐个读取数据直到发现某个特定的字符
bool Read_Upto( std::string &szData,char chTerm,long &alBytesRead ,HANDLE& hEventToReset);
//读取所有未读取的字节
bool Read_Available( std::string &szData,HANDLE & hEventToReset);
inline long GetSize() {return m_szInternalBuffer.size();}
inline bool IsEmpty() {return m_szInternalBuffer.size() == 0; }
bool Read_Upto_FIX( std::string &szData,char chTerm,long &alBytesRead,HANDLE & hEventToReset);
};
#endif // !defined(AFX_SerialBuffer_H__FD164A5F_9F09_451B_8E42_180999B4DB9A__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -