150 lines
3.2 KiB
C
150 lines
3.2 KiB
C
|
|
#ifndef ASYNCHRONISM_ENGINE_HEAD_FILE
|
|||
|
|
#define ASYNCHRONISM_ENGINE_HEAD_FILE
|
|||
|
|
|
|||
|
|
#pragma once
|
|||
|
|
|
|||
|
|
|
|||
|
|
#include "KernelEngineHead.h"
|
|||
|
|
|
|||
|
|
//<2F><>˵<EFBFBD><CBB5>
|
|||
|
|
class CAsynchronismEngine;
|
|||
|
|
typedef class CWHArray<IAsynchronismEngineSink *> CAsynchronismEngineSinkArray;
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>
|
|||
|
|
class CControlWnd : public CWnd
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
CAsynchronismEngine * m_pAsynchronismEngine; //<2F>첽<EFBFBD><ECB2BD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CControlWnd();
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual ~CControlWnd();
|
|||
|
|
|
|||
|
|
//<2F><>Ϣӳ<CFA2><D3B3>
|
|||
|
|
protected:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
HRESULT OnAsynRequest(WPARAM wParam, LPARAM lParam);
|
|||
|
|
|
|||
|
|
DECLARE_MESSAGE_MAP()
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><>Ϣ<EFBFBD>߳<EFBFBD>
|
|||
|
|
class CMessageThread : public CWHThread
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
CAsynchronismEngine * m_pAsynchronismEngine; //<2F>첽<EFBFBD><ECB2BD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CMessageThread();
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual ~CMessageThread();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//ֹͣ<CDA3>߳<EFBFBD>
|
|||
|
|
virtual bool StopThread(DWORD dwWaitSeconds = INFINITE);
|
|||
|
|
//<2F><>ֹ<EFBFBD>߳<EFBFBD>
|
|||
|
|
virtual bool TerminateThread(DWORD dwExitCode);
|
|||
|
|
|
|||
|
|
//<2F>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
private:
|
|||
|
|
//<2F><>ʼ<EFBFBD>¼<EFBFBD>
|
|||
|
|
virtual bool OnThreadStratEvent();
|
|||
|
|
//ֹͣ<CDA3>¼<EFBFBD>
|
|||
|
|
virtual bool OnThreadStopEvent();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
|
|||
|
|
private:
|
|||
|
|
//<2F><><EFBFBD>к<EFBFBD><D0BA><EFBFBD>
|
|||
|
|
virtual bool OnEventThreadRun();
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F>첽<EFBFBD><ECB2BD><EFBFBD><EFBFBD>
|
|||
|
|
class CAsynchronismEngine : public IAsynchronismEngine
|
|||
|
|
{
|
|||
|
|
friend class CControlWnd;
|
|||
|
|
friend class CMessageThread;
|
|||
|
|
|
|||
|
|
//<2F>ں˱<DABA><CBB1><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
bool m_bService; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
|||
|
|
BYTE m_cbBuffer[MAX_ASYNCHRONISM_DATA]; //<2F><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD>
|
|||
|
|
CAsynchronismEngineSinkArray m_AsynchronismEngineSinkArray; //<2F>첽<EFBFBD><ECB2BD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
CControlWnd m_ControlWnd; //<2F><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>
|
|||
|
|
CCriticalSection m_CriticalSection; //<2F>߳<EFBFBD><DFB3><EFBFBD>
|
|||
|
|
CWHDataQueue m_DataStorage; //<2F><><EFBFBD>ݴ洢
|
|||
|
|
CMessageThread m_MessageThread; //<2F>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CAsynchronismEngine(void);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual ~CAsynchronismEngine(void);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F>ͷŶ<CDB7><C5B6><EFBFBD>
|
|||
|
|
virtual VOID Release()
|
|||
|
|
{
|
|||
|
|
if (IsValid()) delete this; //
|
|||
|
|
}
|
|||
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
|||
|
|
virtual bool IsValid()
|
|||
|
|
{
|
|||
|
|
return AfxIsValidAddress(this, sizeof(CAsynchronismEngine)) ? true : false;
|
|||
|
|
}
|
|||
|
|
//<2F>ӿڲ<D3BF>ѯ
|
|||
|
|
virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool StartService();
|
|||
|
|
//ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool ConcludeService();
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool InsertRequest(WORD wRequestID, void * const pBuffer, WORD wDataSize, IUnknownEx * pIUnknownEx);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ܽӿ<DCBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>и<EFBFBD><D0B8><EFBFBD>
|
|||
|
|
virtual bool GetBurthenInfo(tagBurthenInfo & BurthenInfo);
|
|||
|
|
//ע<>ṳ<EFBFBD><E1B9B3>
|
|||
|
|
virtual bool SetAsynchronismSink(IUnknownEx * pIUnknownEx);
|
|||
|
|
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool PostAsynchronismData(WORD wIdentifier, VOID * pData, WORD wDataSize);
|
|||
|
|
//Ͷ<><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool PostAsynchronismData(WORD wIdentifier, tagDataBuffer DataBuffer[], WORD wDataCount);
|
|||
|
|
//ȡ<><C8A1>ע<EFBFBD><D7A2>
|
|||
|
|
virtual bool UnRegisterAsynchronismEngineSink(IUnknownEx * pIUnknownEx);
|
|||
|
|
|
|||
|
|
//<2F>̺߳<DFB3><CCBA><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
//<2F>߳<EFBFBD><DFB3><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool OnMessageThreadStart();
|
|||
|
|
//<2F>߳<EFBFBD>ֹͣ
|
|||
|
|
bool OnMessageThreadStop();
|
|||
|
|
//<2F>첽<EFBFBD><ECB2BD><EFBFBD><EFBFBD>
|
|||
|
|
void OnAsynchronismRequest(WORD wRequestID, IAsynchronismEngineSink * pIAsynchronismEngineSink);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
#endif
|