libev 学习(一)

来源:互联网 发布:外国人学中文的软件 编辑:程序博客网 时间:2024/06/07 22:37

ev_io结构体说明

ev_io 结构体如下, EV_WATCHER_LIST是一个链表,每一个结点都是一个监视器。监视器的属性包括:active /*活动状态*/、pending、EV_DECL_PRIORITY /*优先级*/ 、EV_CB_DECLARE (type) /*回调函数*/。

typedef struct ev_io{    EV_WATCHER_LIST (ev_io)    int fd;        /* ro */    int events;    /* ro */};

等价于

typedef struct ev_io{    EV_WATCHER (ev_io)                            struct ev_watcher_list *next;    int fd;        /* ro */    int events;    /* ro */};typedef struct ev_io{    int active;                  /* private */        int pending;                 /* private */        EV_DECL_PRIORITY             /* private */        EV_COMMON                    /* rw */             EV_CB_DECLARE (ev_io)         /* private */                             struct ev_watcher_list *next;    int fd;        /* ro */    int events;    /* ro */};#define EV_WATCHER (ev_io)                       \  int active;                  /* private */    \  int pending;                 /* private */    \  EV_DECL_PRIORITY             /* private */    \  EV_COMMON                    /* rw */         \  EV_CB_DECLARE (ev_io)         /* private */    typedef struct ev_watcher_list{    EV_WATCHER_LIST (ev_watcher_list)} ev_watcher_list;

libev宏定义说明

#define VAR(name,decl) decl;
#define VARx(type,name) VAR(name, type name)
当VARx(ev_tstamp, now_floor)展开可以看到
VARx(ev_tstamp, now_floor)==>VAR(now_floor, ev_tstamp now_floor)==>ev_tstamp now_floor;
其实就是声明一个ev_tstamp类型 的变量now_floor

ev_loop结构体说明

struct ev_loop  {    ev_tstamp ev_rt_now;    #define ev_rt_now ((loop)->ev_rt_now)    #define VAR(name,decl) decl;      #include "ev_vars.h"    #undef VAR  };

该结构体等价于插入 #include “ev_vars.h” 代码段

struct ev_loop  {    ev_tstamp ev_rt_now;    #define ev_rt_now ((loop)->ev_rt_now)    #define VAR(name,decl) decl;    #define VARx(type,name) VAR(name, type name)    VARx(ev_tstamp, now_floor) /* last time we refreshed rt_time */    VARx(ev_tstamp, mn_now)    /* monotonic clock "now" */    VARx(ev_tstamp, rtmn_diff) /* difference realtime - monotonic time */    ....    ....    ....    #undef VAR  };
原创粉丝点击