Files

139 lines
3.2 KiB
C
Raw Permalink Normal View History

2026-03-03 13:56:44 +08:00
#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