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
};