acl  3.5.3.0
acl_timer.h
浏览该文件的文档.
1 #ifndef ACL_TIMER_INCLUDE_H
2 #define ACL_TIMER_INCLUDE_H
3 
4 #include "../stdlib/acl_define.h"
5 #include <time.h>
6 #include "../stdlib/acl_iterator.h"
7 #include "../stdlib/acl_ring.h"
8 
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12 
13 /**
14  * 定时器类型定义
15  */
16 typedef struct ACL_TIMER_INFO {
17  /* public */
18  void *obj; /**< 用户的数据对象指针 */
19  acl_int64 when; /**< 被触发的时间截(微妙级) */
20 
21  /* private */
22  ACL_RING entry; /**< 内部用的定时链 */
24 
25 /* 定时器句柄结构 */
26 typedef struct ACL_TIMER ACL_TIMER;
27 
28 struct ACL_TIMER {
29  acl_int64 (*request)(ACL_TIMER *timer, void *obj, acl_int64 delay);
30  acl_int64 (*cancel)(ACL_TIMER *timer, void *obj);
31  void* (*popup)(ACL_TIMER* timer);
32 
34  acl_int64 present;
35  acl_int64 time_left;
36 
37  /* for acl_iterator */
38 
39  /* 取迭代器头函数 */
40  const void *(*iter_head)(ACL_ITER*, struct ACL_TIMER*);
41  /* 取迭代器下一个函数 */
42  const void *(*iter_next)(ACL_ITER*, struct ACL_TIMER*);
43  /* 取迭代器尾函数 */
44  const void *(*iter_tail)(ACL_ITER*, struct ACL_TIMER*);
45  /* 取迭代器上一个函数 */
46  const void *(*iter_prev)(ACL_ITER*, struct ACL_TIMER*);
47 
48  /* 获得与当前迭代指针相关联的 ACL_TIMER_INFO 对象 */
49  const ACL_TIMER_INFO *(*iter_info)(ACL_ITER*, struct ACL_TIMER*);
50 };
51 
52 /**
53  * 添加定时任务
54  * @param timer {ACL_TIMER*},定时器句柄
55  * @param obj {void*},用户级动态变量
56  * @param delay {acl_int64},被触发的时间间隔(微秒级)
57  * @return {acl_int64} 新的定时任务的解决时间截(微秒级)
58  */
59 ACL_API acl_int64 acl_timer_request(ACL_TIMER* timer, void *obj, acl_int64 delay);
60 
61 /**
62  * 取消定时任务
63  * @param timer {ACL_TIMER*},定时器句柄
64  * @param obj {void*},用户级动态变量
65  * @return {acl_int64},距离下一个定时任务被触发的时间间隔(微秒级)
66  */
67 ACL_API acl_int64 acl_timer_cancel(ACL_TIMER* timer, void *obj);
68 
69 /**
70  * 从定时器中获取到时的定时任务
71  * @param timer {ACL_TIMER*},定时器句柄
72  * @return {void*},用户级动态变量
73  */
74 ACL_API void *acl_timer_popup(ACL_TIMER* timer);
75 
76 /**
77  * 距离下一个定时任务被触发的时间间隔
78  * @param timer {ACL_TIMER*},定时器句柄
79  * @return {acl_int64} 返回值单位为微秒
80  */
81 ACL_API acl_int64 acl_timer_left(ACL_TIMER* timer);
82 
83 /**
84  * 遍历定时器里的所有定时任务项
85  * @param timer {ACL_TIMER*},定时器句柄
86  * @param action {void (*)(ACL_TIMER_INFO*, void*)} 用户的遍历回调函数
87  * @param arg {void*} action 中的第二个参数
88  */
89 ACL_API void acl_timer_walk(ACL_TIMER *timer, void (*action)(ACL_TIMER_INFO *, void *), void *arg);
90 
91 /**
92  * 创建定时器句柄
93  * @return {ACL_TIMER*}
94  */
95 ACL_API ACL_TIMER *acl_timer_new(void);
96 
97 /**
98  * 释放定时器句柄
99  * @param timer {ACL_TIMER*}
100  * @param free_fn {void (*)(void*)} 释放定时器里的用户对象的回调释放函数
101  */
102 ACL_API void acl_timer_free(ACL_TIMER* timer, void (*free_fn)(void*));
103 
104 /**
105  * 获得定时器里定时任务的数量
106  * @param timer {ACL_TIMER*}
107  * @return {int} >= 0
108  */
109 ACL_API int acl_timer_size(ACL_TIMER *timer);
110 
111 #ifdef __cplusplus
112 }
113 #endif
114 
115 #endif
void * obj
Definition: acl_timer.h:18
ACL_API void acl_timer_walk(ACL_TIMER *timer, void(*action)(ACL_TIMER_INFO *, void *), void *arg)
ACL_API int acl_timer_size(ACL_TIMER *timer)
ACL_API acl_int64 acl_timer_cancel(ACL_TIMER *timer, void *obj)
ACL_RING timer_header
Definition: acl_timer.h:33
ACL_API acl_int64 acl_timer_request(ACL_TIMER *timer, void *obj, acl_int64 delay)
acl_int64(* cancel)(ACL_TIMER *timer, void *obj)
Definition: acl_timer.h:30
acl_int64 present
Definition: acl_timer.h:34
ACL_API acl_int64 acl_timer_left(ACL_TIMER *timer)
ACL_API ACL_TIMER * acl_timer_new(void)
ACL_API void acl_timer_free(ACL_TIMER *timer, void(*free_fn)(void *))
ACL_RING entry
Definition: acl_timer.h:22
acl_int64 when
Definition: acl_timer.h:19
ACL_API void * acl_timer_popup(ACL_TIMER *timer)
struct ACL_TIMER_INFO ACL_TIMER_INFO
acl_int64(* request)(ACL_TIMER *timer, void *obj, acl_int64 delay)
Definition: acl_timer.h:29
acl_int64 time_left
Definition: acl_timer.h:35