+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的架构之中,这两个文件的存在仅仅是为了方便!!!