现在的位置: 首页 > 综合 > 正文

发布一个Timing-Wheel定时器,求拍砖

2013年03月21日 ⁄ 综合 ⁄ 共 4075字 ⁄ 字号 评论关闭

最近看了一下定时器的实现方式主要有链表,最小堆,还有就是Timing-Wheel定时器方式,自己实现了一个Timing-Wheel定时器,求拍砖

 

主要数据结构:

 

/*定时器节点*/

struct timer_node{

timer_id id; /*定时器id号*/       

int interval; /*定时器超时值*/

int solt; /*触发定时器需要的时间片*/

timer_expiry *cb; /*定时器回调函数*/

void *user_data; /*定时器传入参数*/

int len; /*定时器传入参数长度*/

struct timer_node *next;     

};

/*定时器管理*/

struct timer{

int   time_solt; /*定时器时间片大小*/

int   solt_num; /*定时器最大数量*/      

int   cur_solt; /*定时器当前时间片大小*/

int   solt_count;               /*定时器累计时间片大小*/

long  cur_time; /*定时器当前时间*/

long  pre_time; /*定时器上一个时间*/

get_time *gt; /*定时器得到当前时间*/

struct timer_node **timer_list;

} T;

定时器回调函数 :

/*定时器超时函数*/

typedef int timer_expiry(timer_id id, void *user_data, int len);

/*获得当前时间*/

typedef long get_time(void);

timer_node结构中timer_expiry *cb为定时器超时调用的函数,返回0结束定时器,返回1继续循环定时器,这样定时器执行次数控制就非常方便了

timer结构体中get_time *gt为获得当前时间回调函数,如果返回秒即为秒定时器,返回毫秒即为毫秒定时器

具体代码如下:

time.h

 

time.c

 

测试代码testtimer

 

 

 

抱歉!评论已关闭.