DataExchangePipe.h 1.33 KB
#if !defined(AFX_DATAEXCHANGEPIPE_H__FAA2F47E_5211_449D_A351_7E40AABB57D7__INCLUDED_)
#define AFX_DATAEXCHANGEPIPE_H__FAA2F47E_5211_449D_A351_7E40AABB57D7__INCLUDED_

#include "BaseDataTypeDef.h"
#include "BaseEvent.h"
#include "BaseObject.h"

#define DATA_EXCHANGE_BLOCK_SIZE					8192*1024

typedef struct structDataExchangeBlock
{
	INT32 wDataLen;
	BYTE lpData[DATA_EXCHANGE_BLOCK_SIZE];
}DataExchangeBlock;

class CDataExchangePipe : public CBaseObject
{
public:
	CDataExchangePipe(long lDataBufferCount = 100);
	virtual ~CDataExchangePipe();

public:
	BOOL MultiPut(void* pData, INT32 wDataLen, DWORD nTimeOut = 10, BOOL bNotifyImmediate = TRUE);
	BOOL PutDataEx(void* pData, INT32 wDataLen, DWORD nTimeOut = 10, BOOL bNotifyImmediate = TRUE);
	void ClearData();
	DataExchangeBlock* GetDataExchangeBlock(DWORD nTimeOut = 10);

protected:
	void UnlockPut();
	void LockPut();
	BOOL PutData(void* pData, INT32 wDataLen, DWORD nTimeOut = 0, BOOL bNotifyImmediate = TRUE);

public:
	DataExchangeBlock** m_ppDataBuffers;
	void* m_pBuffer;

protected:
	CBaseEvent m_DataArriveEvent;
	CBaseEvent m_DataBufferAvailableEvent;
	CBaseObject m_MultiPutObject;
	long m_lDataBufferCount;
	long m_lFirstIndex;
	long m_lCurrentIndex;
};

#endif // !defined(AFX_DATAEXCHANGEPIPE_H__FAA2F47E_5211_449D_A351_7E40AABB57D7__INCLUDED_)