Files
wnmj-normal/Servers/服务器组件/内核引擎/TimerEngine.h

119 lines
2.5 KiB
C
Raw Normal View History

2026-03-03 13:56:44 +08:00
#ifndef TIMERENGINE_HEAD_FILE
#define TIMERENGINE_HEAD_FILE
#pragma once
//ϵͳͷ<CDB3>ļ<EFBFBD>
#include "KernelEngineHead.h"
#include "QueueServiceEvent.h"
//<2F><>˵<EFBFBD><CBB5>
class CTimerEngine;
//////////////////////////////////////////////////////////////////////////
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD>߳<EFBFBD>
class CTimerThread : public CWHThread
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
CTimerEngine * m_pTimerEngine; //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CTimerThread(void);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CTimerThread(void);
//<2F><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD>
public:
//<2F><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>
bool InitThread(CTimerEngine * pTimerEngine);
//<2F><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
private:
//<2F><><EFBFBD>к<EFBFBD><D0BA><EFBFBD>
virtual bool OnEventThreadRun();
};
//////////////////////////////////////////////////////////////////////////
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct tagTimerItem
{
DWORD wTimerID; //<2F><>ʱ<EFBFBD><CAB1> ID
DWORD dwElapse; //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
DWORD dwDestTime; //Ŀ<><C4BF>ʱ<EFBFBD><CAB1>
DWORD dwRepeatTimes; //<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
WPARAM wBindParam; //<2F>󶨲<EFBFBD><F3B6A8B2><EFBFBD>
};
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9B6A8>
typedef CWHArray<tagTimerItem *> CTimerItemPtr;
//////////////////////////////////////////////////////////////////////////
//<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class CTimerEngine : public ITimerEngine
{
friend class CTimerThread;
//״̬<D7B4><CCAC><EFBFBD><EFBFBD>
protected:
bool m_bService; //<2F><><EFBFBD>б<EFBFBD>־
CTimerItemPtr m_TimerItemFree; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CTimerItemPtr m_TimerItemActive; //<2F><EFBFBD><EEB6AF><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
protected:
CCriticalSection m_CriticalSection; //<2F>߳<EFBFBD><DFB3><EFBFBD>
CTimerThread m_TimerThread; //<2F><>ʱ<EFBFBD><CAB1><EFBFBD>߳<EFBFBD>
//IQueueServiceSink *m_pIQueueServiceSink; //֪ͨ<CDA8>ص<EFBFBD>
CQueueServiceEvent m_QueueServiceEvent; //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
public:
//<2F><><EFBFBD><EFBFBD><ECBAAF>
CTimerEngine(void);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual ~CTimerEngine(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(CTimerEngine)) ? true : false;}
//<2F>ӿڲ<D3BF>ѯ
virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
//<2F>ӿں<D3BF><DABA><EFBFBD>
public:
//<2F><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1>
virtual bool SetTimer(DWORD dwTimerID, DWORD dwElapse, DWORD dwRepeat, WPARAM dwBindParameter);
//ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
virtual bool KillTimer(DWORD dwTimerID);
//ɾ<><C9BE><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
virtual bool KillAllTimer();
//<2F><><EFBFBD>ýӿ<C3BD>
virtual bool SetTimerEngineEvent(IUnknownEx * pIUnknownEx);
//ʱ<>䵥Ԫ
virtual bool SetTimeCell(DWORD dwTimeCell){ return true; }
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
public:
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
virtual bool StartService();
//ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
virtual bool ConcludeService();
//<2F>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
private:
//<2F><>ʱ<EFBFBD><CAB1>֪ͨ
void OnTimerThreadSink();
};
//////////////////////////////////////////////////////////////////////////
#endif