1. 程式人生 > >libev原始碼分析(三)---ev_timer

libev原始碼分析(三)---ev_timer

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觸發一次超時,執行回撥函式。