acl  3.5.3.0
event_timer.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include "../stdlib/noncopyable.hpp"
4 #include <list>
5 
6 namespace acl
7 {
8 
9 class event_task;
10 
12 {
13 public:
14  /**
15  * 构造函数
16  * @param keep {bool} 该定时器是否允许自动重启
17  */
18  event_timer(bool keep = false);
19  virtual ~event_timer();
20 
21  /**
22  * 当定时器里的任务数为空时的回调函数,
23  * 子类可以在其中释放,一旦该函数被调用,
24  * 则意味着该定时器及其中的所有定时任务都从
25  * 定时器集合中被删除
26  * 该函数被触发的条件有三个:
27  * 1) 定时器所有的任务数为 0 时
28  * 2) 当没有设置重复定时器且该定时器中有一个定时任务被触发后
29  * 3) 当 del_timer(event_timer*) 被调用后
30  */
31  virtual void destroy(void) {}
32 
33  /**
34  * 定时器里的任务是否为空
35  * @return {bool}
36  */
37  bool empty(void) const
38  {
39  return tasks_.empty();
40  }
41 
42  /**
43  * 定时器里的任务个数
44  * @return {size_t}
45  */
46  size_t length(void) const
47  {
48  return length_;
49  }
50 
51  /**
52  * 该定时器是否是自动重启的
53  * @param on {bool}
54  */
55  void keep_timer(bool on);
56 
57  /**
58  * 判断该定时器是否是自动重启的
59  * @return {bool}
60  */
61  bool keep_timer(void) const
62  {
63  return keep_;
64  }
65 
66  /**
67  * 清空定时器里的定时任务
68  * @return {int} 被清除的定时任务的个数
69  */
70  int clear(void);
71 
72  /**
73  * 子类必须实现此回调函数,注:子类或调用者禁止在
74  * timer_callback 内部调用 event_timer 的析构
75  * 函数,否则将会酿成大祸
76  * @param id {unsigned int} 对应某个任务的 ID 号
77  */
78  virtual void timer_callback(unsigned int id) = 0;
79 
80  /****************************************************************/
81  /* 子类可以调用如下函数添加一些新的定时器任务 ID 号 */
82  /****************************************************************/
83 #if defined(_WIN32) || defined(_WIN64)
84  /**
85  * 针对本定时器增加新的任务ID号,这样便可以通过一个定时器启动
86  * 多个定时任务
87  * @param id {unsigned int} 定时器定时任务ID号
88  * @param delay {__int64} 每隔多久自动触发该定时器,同时将对应的定时器定时
89  * 任务ID号传回(微秒级)
90  * @return {__int64} 距离本定时器的第一个将会触发的定时任务ID还多久(微秒级)
91  */
92  __int64 set_task(unsigned int id, __int64 delay);
93 
94  /**
95  * 删除定时器中某个消息ID对应的定时任务
96  * @param {unsigned int} 定时任务ID
97  * @return {__int64} 距离本定时器的第一个将会触发的定时任务ID还多久(微秒级)
98  */
99  __int64 del_task(unsigned int id);
100 #else
101  long long int set_task(unsigned int id, long long int delay);
102  long long int del_task(unsigned int id);
103 #endif
104 
105  //////////////////////////////////////////////////////////////////////
106 
107  /**
108  * 触发所有到时的定时任务
109  * @return {long lont int} 下一个将要到时的任务
110  */
111 #if defined(_WIN32) || defined(_WIN64)
112  __int64 trigger(void);
113  __int64 min_delay(void) const
114  {
115  return min_delay_;
116  }
117 #else
118  long long int trigger(void);
119  long long int min_delay(void) const
120  {
121  return min_delay_;
122  }
123 #endif
124 
125 protected:
126 #if defined(_WIN32) || defined(_WIN64)
127  __int64 min_delay_;
128  __int64 present_;
129 #else
130  long long int min_delay_;
131  long long int present_;
132 #endif
133 
134 private:
135  size_t length_;
136  std::list<event_task*> tasks_;
137  bool keep_; // 该定时器是否允许自动重启
138 #if defined(_WIN32) || defined(_WIN64)
139  __int64 set_task(event_task* task);
140 #else
141  long long int set_task(event_task* task);
142 #endif
143 
144  /**
145  * 设置当前定时器的时间截
146  */
147  void set_time(void);
148 };
149 
150 } // namespace acl
long long int min_delay(void) const
virtual void destroy(void)
Definition: event_timer.hpp:31
size_t length(void) const
Definition: event_timer.hpp:46
long long int present_
bool empty(void) const
Definition: event_timer.hpp:37
long long int min_delay_
bool keep_timer(void) const
Definition: event_timer.hpp:61
#define ACL_CPP_API