libevent简单介绍.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
libevent简单介绍

Libevent简单介绍 深圳腾讯计算机系统有限公司 版权所有 不得复制他用 目 录 简介 主页: HYPERLINK /~provos/libevent/ /~provos/libevent/。 libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。 编译库代码,编译脚本会判断OS支持哪种类型的事件机制(select、epoll或kqueue),然后条件编译相应代码,供上层使用的接口仍然是保持统一的。 libevent支持用户使用三种类型的事件,分别是网络IO、定时器、信号三种。定时器的数据结构使用最小堆(Min Heap),以提高效率。网络IO和信号的数据结构采用了双向链表(TAILQ)。在实现上主要有3种链表: EVLIST_INSERTED, EVLIST_ACTIVE, EVLIST_TIMEOUT,一个ev在这3种链表之间被插入或删除,处于EVLIST_ACTIVE链表中的ev最后将会被调度执行。 有许多开源项目使用libevent,例如memcached。使用libevent,使得memcached可以适应多种操作系统。Libevent对底层异步函数提供了较薄封装,库本身没有消耗过多性能;另外,使用堆排序管理定时器队列,提供了较高的性能。 使用介绍 网络IO 代码例子 //事件回调处理函数 Static void MyCallBack(const int fd, const short which, void *arg) { If(EV_READ==which){ //读事件处理 } …… } Int main(int argc, char** argv) { //初始化libevent struct event_base *pEventBase; pEventBase =event_init(); int sock=socket(……); struct event event; event_set(event , sock, EV_READ | EV_PERSIST, MyCallBack, (void*)0 ); event_base_set(pEventBase, event); event_add(event, 0); event_base_loop(pEventBase, 0); Return 0; } 基本函数介绍 HYPERLINK /~provos/libevent/doxygen-2.0.1/event__compat_8h.html \l 1bf74386dd3725e1538fed2d70c1c113 \o Initialize the event API. event_init:初始化libevent库。 event_set:赋值struct event结构。可以用event_add把该事件结构增加到事件循环,用event_del从事件循环中删除。支持的事件类型可以是下面组合:EV_READ(可读), EV_WRITE(可写),EV_PERSIST(除非调用event_del,否则事件一直在事件循环中)。 event_base_set:修改struct event事件结构所属的event_base为指定的event_base。Libevnet内置一个全局的event_base结构。多个线程应用中,如果多个线程都需要一个libevent事件循环,需要调用event_base_set修改事件结构基于的event_base。 event_add:增加事件到事件监控中。 event_base_loop:事件循环。调用底层的select、poll或epoll等,如监听事件发生,调用事件结构中指定的回调函数。 定时器 代码例子 struct event g_clockevent; struct event_base *g_pEventBase; void clock_handler(const int fd, const short which, void *arg) { static bool initialized = false; if (initialized) { evtimer_del(g_clockevent); } else { initialized = true; } evtimer_set(g_clockevent, clock_handler, (void*) 0); //定时器时间 struct timeval t ; t.tv_sec=1; t.tv_usec=0;

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档