-
int lasttime;
-
-
static void
-
timeout_cb(int fd, short event, void *arg) //事件回调函数
-
{
-
struct timeval tv;
-
struct event *timeout = arg; //获取事件
-
int newtime = time(NULL); //得到当前时间
-
-
printf("%s: called at %d: %d\n", __func__, newtime,
-
newtime - lasttime); //表示经过了多少时间,回调函数被执行
-
lasttime = newtime; //重新设定lasttime为当前时间
-
-
evutil_timerclear(&tv);
-
tv.tv_sec = 2;
-
event_add(timeout, &tv); //重新绑定超时事件
-
}
-
int
-
main (int argc, char **argv)
-
{
-
struct event timeout; //定义一个事件eventout,这里主要是举例liebevent的超时事件的执行步骤,所以事件名称是timeout
-
struct timeval tv; //定义时间
-
-
/* Initalize the event library */
-
event_init(); //初始化event_base,这里初始化系统中的一个名为current_base的全局event_base对象
-
-
/* Initalize one event */
-
evtimer_set(&timeout, timeout_cb, &timeout); //设定timeout这个事件的回调函数timeout_cb与参数&timeout
-
-
evutil_timerclear(&tv); //把tv中的时间清零
-
tv.tv_sec = 2; //设定时间=2s
-
event_add(&timeout, &tv); //绑定这个事件到默认的event_base中,也就是current_base
-
-
lasttime = time(NULL); //获取当前时间
-
-
event_dispatch(); //执行事件分发
-
-
return (0);
-
}
下面从这个timeout事件的这个例子中来分析
(1) 首先定义一个事件,名字为timeout
(2) 调用event_init()初始化全局对象current_base
(3) 调用evtimer_set()设置事件的回调函数与参数
(4) 调用event_add()绑定这个事件到currren_base
(5) 执行事件分发函数event_dispatch()
在后续的文章中,将陆续对上面的步骤所设计到的代码进行详细的分析
阅读(716) | 评论(0) | 转发(0) |