119 lines
2.5 KiB
C++
119 lines
2.5 KiB
C++
#ifndef TIMERENGINE_HEAD_FILE
|
|
#define TIMERENGINE_HEAD_FILE
|
|
|
|
#pragma once
|
|
|
|
//系统头文件
|
|
|
|
#include "KernelEngineHead.h"
|
|
#include "QueueServiceEvent.h"
|
|
|
|
//类说明
|
|
class CTimerEngine;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//定时器线程
|
|
class CTimerThread : public CWHThread
|
|
{
|
|
//变量定义
|
|
protected:
|
|
CTimerEngine * m_pTimerEngine; //定时器引擎
|
|
//函数定义
|
|
public:
|
|
//构造函数
|
|
CTimerThread(void);
|
|
//析构函数
|
|
virtual ~CTimerThread(void);
|
|
|
|
//功能函数
|
|
public:
|
|
//配置函数
|
|
bool InitThread(CTimerEngine * pTimerEngine);
|
|
|
|
//重载函数
|
|
private:
|
|
//运行函数
|
|
virtual bool OnEventThreadRun();
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//定时器子项
|
|
struct tagTimerItem
|
|
{
|
|
DWORD wTimerID; //定时器 ID
|
|
DWORD dwElapse; //定时间隔
|
|
DWORD dwDestTime; //目标时间
|
|
DWORD dwRepeatTimes; //重复次数
|
|
WPARAM wBindParam; //绑定参数
|
|
};
|
|
|
|
//定时器子项数组定义
|
|
typedef CWHArray<tagTimerItem *> CTimerItemPtr;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
//定时器引擎
|
|
class CTimerEngine : public ITimerEngine
|
|
{
|
|
friend class CTimerThread;
|
|
|
|
//状态变量
|
|
protected:
|
|
bool m_bService; //运行标志
|
|
CTimerItemPtr m_TimerItemFree; //空闲数组
|
|
CTimerItemPtr m_TimerItemActive; //活动数组
|
|
|
|
//组件变量
|
|
protected:
|
|
CCriticalSection m_CriticalSection; //线程锁
|
|
CTimerThread m_TimerThread; //定时器线程
|
|
//IQueueServiceSink *m_pIQueueServiceSink; //通知回调
|
|
CQueueServiceEvent m_QueueServiceEvent; //通知组件
|
|
|
|
//函数定义
|
|
public:
|
|
//构造函数
|
|
CTimerEngine(void);
|
|
//析构函数
|
|
virtual ~CTimerEngine(void);
|
|
|
|
//基础接口
|
|
public:
|
|
//释放对象
|
|
virtual VOID Release(){ if (IsValid()) delete this;}
|
|
//是否有效
|
|
virtual bool IsValid(){ return AfxIsValidAddress(this, sizeof(CTimerEngine)) ? true : false;}
|
|
//接口查询
|
|
virtual void * QueryInterface(const IID & Guid, DWORD dwQueryVer);
|
|
|
|
//接口函数
|
|
public:
|
|
//设置定时器
|
|
virtual bool SetTimer(DWORD dwTimerID, DWORD dwElapse, DWORD dwRepeat, WPARAM dwBindParameter);
|
|
//删除定时器
|
|
virtual bool KillTimer(DWORD dwTimerID);
|
|
//删除定时器
|
|
virtual bool KillAllTimer();
|
|
//设置接口
|
|
virtual bool SetTimerEngineEvent(IUnknownEx * pIUnknownEx);
|
|
//时间单元
|
|
virtual bool SetTimeCell(DWORD dwTimeCell){ return true; }
|
|
|
|
//管理接口
|
|
public:
|
|
//开始服务
|
|
virtual bool StartService();
|
|
//停止服务
|
|
virtual bool ConcludeService();
|
|
|
|
//内部函数
|
|
private:
|
|
//定时器通知
|
|
void OnTimerThreadSink();
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
#endif |