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 };
阅读全文
0 0
- libev 学习(一)
- libev学习(一)初识libev
- libev学习笔记(一)——主要数据结构
- libev学习笔记(一)——主要数据结构
- libev学习
- 事件库之Libev(一)
- libev学习笔记(持续更新)
- libev学习(二)常见类型剖析
- libev源码分析(一)libev数据结构整理
- libev教程一:libev简单入门
- Libev学习笔记1
- libev 学习笔记
- libev学习资料
- libev学习资料
- libev学习笔记(二)——ev_io
- libev学习笔记(持续更新) ------good入门好文
- Libev-3.7源码分析(一)
- libev
- POJ
- Treap模板+Treap介绍。。。
- 欧奈尔的琴弦
- 百练_2733:判断闰年
- 通过WinSCP下拉上传liunx服务器上的文件到windows
- libev 学习(一)
- 424C
- 学生日志管理系统(ArrayList集合的应用)
- PHP对关联数组(键值对数组)遍历循环
- 硅谷之火:人与计算机的未来
- SQLite3创建数据库的方法
- 百练_2734:十进制到八进制
- 8 种 NoSQL 数据库系统对比
- AJAX 跨域请求