119 lines
2.5 KiB
C
119 lines
2.5 KiB
C
|
|
#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
|