libev 学习(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Oyj1020/article/details/75949487

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

猜你喜欢

转载自blog.csdn.net/Oyj1020/article/details/75949487