#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_)