Files
wnmj-normal/Servers/服务器组件/内核引擎/TimerEngine.h
2026-03-03 13:56:44 +08:00

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