libev目录结构
+ev++.h
+ev.c
+ev.h
+event.c
+event.h
+ev_epool.c
+ev_kqueue.c
+ev_pool.c
+ev_port.c
+ev_select.c
+ev_vars.h
+ev_win32.c
+ev_wrap.h
- 说明
- ev++.h: c++的封装
- ev.c ev.h 事件主循环实现
- event.c event.h 事件定义实现
- ev_epool.c/ev_pool.c/ev_kqueue.c/ev_port.h/ev_select.c IO复用封装
- ev_vars.h 事件主循环结构体成员声明定义
- ev_wrap.h 事件主循环结构体实例各成员简易宏定义
从最简单的说起ev_vars.h/ev_warp.h
ev_vars.h内是一些列的VARx(type, name)以及VAR(name, type name)
在ev.c中有如下结构体
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_wrap.h"
VARx(ev_tstamp, now_floor)展开就是 ev_tstamp now_floor;就是定义了一个名为now_floor类型为ev_tstamp的变量;
VAR(pendings, ANPENDING *pendings[NUMPRI])展开就是ANPENDING *pendings[NUMPRI];就是定义了一个名为pendings的ANPENDING指针数组;
所以在vars.h中的就是一些列的结构体成员变量的定义
ev_wrap.h
其中#define acquire_cb ((loop)->acquire_cb), loop是struct ev_loop的实例,所以ev_wrap.h中的所有宏定义都是为了方便才定义的,ev_wrap.h和ev_vars.h是可以对应上。
由此可见ev_vars.h和ev_wrap.h并不在libev的架构之中,这两个文件的存在仅仅是为了方便!!!