程序执行结果:函数
每隔2秒,触发一次定时器。spa
(2)98行:evtimer_assign在event.h中定义以下:3d
再来看看event_assign函数:对象
ev 要初始化的事件对象blog
base 事件对象要指定到哪一个even_base上事件
fd 文件描述符回调函数
type 事件类型event
fn 事件触发时的回调函数定时器
arg 回调函数传参程序
能够看到,evtimer_assign默认填充了2个参数:
fd为-1,由于定时器不须要fd;
type为0。
因为超时时间是在下面的event_add中设置,因此这里也不须要填。
(3)88行:以上执行结果,跟咱们在osp中使用定时器的方法同样,先设置定时器,若是想要从新设置定时器,那么从新event_add。咱们也能够经过设置定时器事件对象的类型为EV_PERSIST,使得这个定时器事件成为一个永久定时器,从而不须要在第88行中,等定时器从新触发后从新设置。
修改后的代码以下:
(4)libevent对定时器的管理:
定时器事件存放在mini-heap中(这个mini-heap好像改造过),key值是定时器事件的超时时间。