Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96005
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-24 22:04
文章分类

全部博文(31)

文章存档

2014年(31)

我的朋友

分类: C/C++

2014-05-29 10:18:42


event_internal.h头文件主要声明了eventop与event_base结构,对这两个结构的深入理解,是对整个libevent处理流程理解的基础

点击(此处)折叠或打开

  1. struct eventop {
  2.     const char *name;    //名称
  3.     void *(*init)(struct event_base *);    //初始化
  4.     int (*add)(void *, struct event *);    //注册事件
  5.     int (*del)(void *, struct event *);    //删除事件
  6.     int (*dispatch)(struct event_base *, void *, struct timeval *);    //时间分发
  7.     void (*dealloc)(struct event_base *, void *);    //释放资源
  8.     /* set if we need to reinitialize the event base */
  9.     int need_reinit;    //是否需要重新初始化
  10. }
eventop结构里面包括了5个函数指针,可以把eventop结构理解为一种实现IO多路复用的接口
libevent支持epoll,select,kqueue、/dev/poll4中IO多路复用接口,并提供了对这四种技术的封装,每种封装都是按照eventop结构的规范进行实现。


点击(此处)折叠或打开

  1. struct event_base {
  2.     const struct eventop *evsel;    // 该变量表示event_base使用的是哪种多路复用技术,该结构在初始化的时候,会绑定到static const struct eventop* eventops[]中的一个
  3.     void *evbase;    //该变量表示具体的eventop实例
  4.     int event_count;        /* counts number of total events */    //总共的event数量
  5.     int event_count_active;    /* counts number of active events */    //当前active event数量

  6.     int event_gotterm;        /* Set to terminate loop */    //立即终止循环的判断字段
  7.     int event_break;        /* Set to terminate loop immediately */    //终止循环的判断字段

  8.     /* active event management */
  9.     struct event_list **activequeues;     //指向活动链表的的指针    
  10.     int nactivequeues;     //当前活动链表的数目

  11.     /* signal handling info */
  12.     struct evsignal_info sig; //信号处理的结构

  13.     struct event_list eventqueue; //event_list结构需要TAILQ_HEAD(name,type)来声明,如TAILQ_HADE(event_list,event),声明一个类型为eventlist,名为eventqueue的链表头节点
  14.     struct timeval event_tv;    //

  15.     struct min_heap timeheap;    //小根堆,用来管理超时的事件

  16.     struct timeval tv_cache;    //
  17. }

event_base是libevent的基础结构,
evsel,evbase两个变量决定了event_base采用的是哪种多路复用的技术。
event_count,event_count_active, eventqueue对event_base中的event进行存储与控制。
event_gotterm, event_break对主循环是否对出进行控制
activequeues, nactivequeues对eventbase中的活动链表进行管理
sig结构对signal event进行管理
timeheap对timeout  event进行管理
event_tv, tv_cache用于主循环的时间控制上







阅读(861) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~