139 lines
3.2 KiB
C
139 lines
3.2 KiB
C
|
|
#ifndef QUEUE_SERVICE_HEAD_FILE
|
|||
|
|
#define QUEUE_SERVICE_HEAD_FILE
|
|||
|
|
|
|||
|
|
#include "KernelEngineHead.h"
|
|||
|
|
|
|||
|
|
|
|||
|
|
#define VER_IQueueServiceSink INTERFACE_VERSION(1,1)
|
|||
|
|
static const GUID IID_IQueueServiceSink = {0x88b5bf59, 0x3a98, 0x43b1, 0xac, 0x85, 0xf1, 0x17, 0x5b, 0x29, 0x69, 0x40};
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD><EFBFBD>ӽӿ<D3BD>
|
|||
|
|
interface IQueueServiceSink : public IUnknownEx
|
|||
|
|
{
|
|||
|
|
//֪ͨ<CDA8>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual void OnQueueServiceSink(WORD wIdentifier, void * pBuffer, WORD wDataSize) = NULL;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
#define VER_IQueueService INTERFACE_VERSION(1,1)
|
|||
|
|
static const GUID IID_IQueueService = {0xcc5310b5, 0x3709, 0x40aa, 0x85, 0x24, 0xd6, 0xc5, 0x87, 0xb0, 0x32, 0x22};
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>нӿ<D0BD>
|
|||
|
|
interface IQueueService : public IServiceModule
|
|||
|
|
{
|
|||
|
|
//<2F><><EFBFBD>ýӿ<C3BD>
|
|||
|
|
virtual bool SetQueueServiceSink(IUnknownEx * pIUnknownEx) = NULL;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
virtual bool GetBurthenInfo(tagBurthenInfo & BurthenInfo) = NULL;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool AddToQueue(WORD wIdentifier, void * const pBuffer, WORD wDataSize) = NULL;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD>
|
|||
|
|
class CQueueServiceThread : public CWHThread
|
|||
|
|
{
|
|||
|
|
//<2F><>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
|
|||
|
|
friend class CQueueService;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
HANDLE m_hCompletionPort; //<2F><><EFBFBD>ɶ˿<C9B6>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
private:
|
|||
|
|
BYTE m_cbBuffer[MAX_ASYNCHRONISM_DATA]; //<2F><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CQueueServiceThread(void);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual ~CQueueServiceThread(void);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
|
|||
|
|
bool InitThread(HANDLE hCompletionPort);
|
|||
|
|
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
bool UnInitThread();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
|
|||
|
|
private:
|
|||
|
|
//<2F><><EFBFBD>к<EFBFBD><D0BA><EFBFBD>
|
|||
|
|
virtual bool OnEventThreadRun();
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
class CQueueService : public IQueueService
|
|||
|
|
{
|
|||
|
|
friend class CQueueServiceThread;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
bool m_bService; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
|||
|
|
HANDLE m_hCompletionPort; //<2F><><EFBFBD>ɶ˿<C9B6>
|
|||
|
|
IQueueServiceSink * m_pIQueueServiceSink; //<2F>ص<EFBFBD><D8B5>ӿ<EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
protected:
|
|||
|
|
CCriticalSection m_CriticalSection; //<2F>߳<EFBFBD><DFB3><EFBFBD>
|
|||
|
|
CWHDataQueue m_DataQueue; //<2F><><EFBFBD>ݴ洢
|
|||
|
|
CQueueServiceThread m_QueueServiceThread; //<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CQueueService(void);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual ~CQueueService(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(CQueueService)) ? true : false;
|
|||
|
|
}
|
|||
|
|
//<2F>ӿڲ<D3BF>ѯ
|
|||
|
|
virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
|||
|
|
public:
|
|||
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool StartService();
|
|||
|
|
//ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool ConcludeService();
|
|||
|
|
//<2F>߳̾<DFB3><CCBE><EFBFBD>
|
|||
|
|
HANDLE GetThreadHandle();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>нӿ<D0BD>
|
|||
|
|
public:
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual bool AddToQueue(WORD wIdentifier, void * const pBuffer, WORD wDataSize);
|
|||
|
|
//<2F><><EFBFBD>ýӿ<C3BD>
|
|||
|
|
virtual bool SetQueueServiceSink(IUnknownEx * pIUnknownEx);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
virtual bool GetBurthenInfo(tagBurthenInfo & BurthenInfo);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
private:
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
bool GetData(tagDataHead & DataHead, void * pBuffer, WORD wBufferSize);
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
void OnQueueServiceThread(const tagDataHead & DataHead, void * pBuffer, WORD wDataSize);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
//////////////////////////////////////////////////////////////////////////
|
|||
|
|
|
|||
|
|
#endif
|