当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

libevent源码浅析(一)[VC/C++编程]

赞助商链接



  本文“libevent源码浅析(一)[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

这里解析的是libevent-1.4.9.

PS:前面还看了libev的源代码,妈的,那代码写的太猥亵了,相对比libevent代码写的好多了..

首先来看一下最主要的几个数据构造:

eventop构造体是全部事件驱动模子的基类.全部的io复用范例城市实现此构造体里各种办法.

struct eventop {
const char *name;   ///<事件驱动名称
void *(*init)(struct event_base *); //<初始化
int (*add)(void *, struct event *); ///<加入新的事件监测
int (*del)(void *, struct event *); ///<从事件监测中删除某一事件
int (*dispatch)(struct event_base *, void *, struct timeval *);///<启动此事件监测
void (*dealloc)(struct event_base *, void *); ///<释放此事件驱动的资源
/* set if we need to reinitialize the event base */
int need_reinit; ///<标志位
};

event_base管理全部的event对象,它包含了一些全部变量,比方事件驱动引擎evsel等.全部的event对象城市包含这个构造体.

struct event_base {
const struct eventop *evsel;  ///<事件驱动引擎
void *evbase;         ///<事件驱动引擎的全局数据,在每一个事件引擎文件中定义,下面会介绍.
int event_count; /* counts number of total events */
int event_count_active; /* counts number of active events */

int event_gotterm; /* Set to terminate loop */
int event_break; /* Set to terminate loop immediately */

/* active event management */
struct event_list **activequeues; ///<激活行列
int nactivequeues;         ///<激活行列数目

/* signal handling info */
struct evsignal_info sig;    ///<信号

struct event_list eventqueue;  ///<全部事件行列
struct timeval event_tv;

struct min_heap timeheap;   ///<这里libevent将按时器行列实现为一个最小堆,也就是为了每次都把时间最晚的按时器能取出来,然后实现超时.更其实算法很简单,想要具体的理解可以去看下算法导论的第六章的Priority queues.

struct timeval tv_cache;
};

event构造表示每个事件,包含了一些事件私有的数据,比方回调函数等..这里事件链表它利用了tail queue.

struct event {
TAILQ_ENTRY (event) ev_next;   ///<下一个事件
TAILQ_ENTRY (event) ev_active_next; ///<下一个激活事件
TAILQ_ENTRY (event) ev_signal_next; ///<下一个信号事件列表
unsigned int min_heap_idx; /* for managing timeouts */

struct event_base *ev_base; ///<全局的base 

int ev_fd;        ///<所需求监测的事件句柄
short ev_events;
short ev_ncalls;
short *ev_pncalls; /* Allows deletes in callback */

struct timeval ev_timeout;  ///<超不时间

int ev_pri; /* smaller numbers are higher priority */

void (*ev_callback)(int, short, void *arg); ///<回调函数
void *ev_arg;              ///<传送给回调函数的参数

int ev_res; /* result passed to event callback */
int ev_flags;
};


  以上是“libevent源码浅析(一)[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • libevent源码浅析(一)
  • <b>libevent源码浅析(二):libevent的按时器的实现</b>
  • <b>libevent源码浅析(三):libevent的信号的处理</b>
  • <b>libevent源码浅析(四)</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .