TimerEngine.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #ifndef TIMER_ENGINE_HEAD_FILE
  2. #define TIMER_ENGINE_HEAD_FILE
  3. #pragma once
  4. #include <Mmsystem.h>
  5. #pragma comment(lib,"Winmm.lib")
  6. #define TIMES_INFINITY DWORD(-1) //无限次数
  7. //////////////////////////////////////////////////////////////////////////////////
  8. interface ITimerCallBack
  9. {
  10. public:
  11. virtual void TimerCallBack(UINT_PTR iTimerID, WPARAM dwBindParameter = 0) = 0;
  12. };
  13. class CAutoLock
  14. {
  15. public:
  16. CAutoLock(LPCRITICAL_SECTION lpCriticalSetion);
  17. virtual ~CAutoLock();
  18. protected:
  19. LPCRITICAL_SECTION m_lpCriticalSetion;
  20. };
  21. // 定时器子项
  22. struct tagTimerItem
  23. {
  24. // 时间参数
  25. ITimerCallBack* pCallBack; // 回调绑定
  26. DWORD dwElapse; // 倒数时间
  27. DWORD dwTimerID; // 时间标识
  28. DWORD dwTimeLeave; // 剩余时间
  29. DWORD dwRepeatTimes; // 重复次数
  30. WPARAM dwBindParameter; // 绑定参数
  31. };
  32. //////////////////////////////////////////////////////////////////////////////////
  33. // 类说明
  34. typedef std::list<std::shared_ptr<tagTimerItem>> CTimerItemArray; // 子项数组
  35. // 定时器引擎
  36. class CTimerEngine
  37. {
  38. // 状态变量
  39. protected:
  40. bool m_bService; // 运行标志
  41. // 配置定义
  42. protected:
  43. DWORD m_dwTimerSpace; // 时间间隔
  44. // 组件变量
  45. protected:
  46. MMRESULT m_timerId;
  47. CTimerItemArray m_TimerItemFree; // 空闲数组
  48. CTimerItemArray m_TimerItemActive; // 活动数组
  49. CRITICAL_SECTION m_CriticalSection; // 锁定对象
  50. // 函数定义
  51. public:
  52. // 构造函数
  53. CTimerEngine();
  54. // 析构函数
  55. virtual ~CTimerEngine();
  56. // 服务接口
  57. private:
  58. // 启动服务
  59. virtual bool StartService();
  60. // 停止服务
  61. virtual bool ConcludeService();
  62. // 接口函数
  63. public:
  64. // 设置定时器
  65. virtual bool SetTimer(ITimerCallBack*, DWORD dwTimerID, DWORD dwElapse, DWORD dwRepeat, WPARAM dwBindParameter = 0);
  66. // 删除定时器
  67. virtual bool KillTimer(ITimerCallBack*, DWORD dwTimerID);
  68. // 删除定时器
  69. virtual bool KillAllTimer();
  70. // 内部函数
  71. //private:
  72. // 定时器通知
  73. VOID OnTimerThreadSink();
  74. //
  75. static CTimerEngine* GetInstance();
  76. };
  77. //extern CTimerEngine g_TimerInstance;
  78. //////////////////////////////////////////////////////////////////////////////////
  79. #endif