程序執行結果:函數
每隔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值是定時器事件的超時時間。