libev原始碼分析(三)---ev_timer
阿新 • • 發佈:2018-12-20
ev_timer結構體:
typedef struct ev_timer
{
int active; /* 是否已經啟用 */
int pending; /* 是否事件易產生,需要執行回撥 */
int priority; /* 事件優先順序 */
void *data; /* rw */
void (*cb)(struct ev_loop *loop, struct ev_timer *w, int revents); /* 回撥 */
ev_tstamp at; /* private */
ev_tstamp repeat; /* rw */
} ev_timer;
相關函式:
ev_timer_init(ev,cb,after,repeat);
引數說明:
ev:ev_timer結構
cb:超時回撥函式
after:多少秒之後呼叫回撥函式
repeat:第一次觸發回撥後每多少秒再次重複觸發回撥
ev_timer_start(EV_P_ ev_timer *w) ;
ev_timer_stop(EV_P_ ev_timer *w) ;
/* stops if active and no repeat, restarts if active and repeating, starts if inactive and repeating */
ev_timer_again(EV_P_ ev_timer *w) ; //可對timer進行重設
引數說明:
EV_P_: loop結構
w:ev_timer結構
一個簡單的重複定時器:
#include <stdio.h> #include <signal.h> #include <string.h> #include <sys/unistd.h> #include "ev.h" void timer_action(struct ev_loop *main_loop,ev_timer *time_w,int e) { puts("In Time action"); ev_timer_stop(main_loop,time_w); } int main(int argc,char **argv) { ev_timer timer_w; struct ev_loop *main_loop = ev_default_loop(0); ev_init(&timer_w,timer_action); ev_timer_set(&timer_w,5,5); ev_timer_start(main_loop,&timer_w); ev_run(main_loop,0); return 0; }
實現功能:每5s觸發一次超時,執行回撥函式。