学习使用libevent(一)
来源:互联网 发布:c语言预处理命令 编辑:程序博客网 时间:2024/05/19 23:00
PRE——写在前面的话
最近在学习libevent,希望可以好好整理一下~
计划是这样,先简单总结一下怎么使用它,然后开始分析源代码。
其实,目前网上已经有不少相关资料,比如说,官网(http://libevent.org/)为我们提供的Documentation,还有http://cpp.ezbty.org/的《libevent源码深度剖析系列》,这里再总结一下,也算是对自己的提高吧。
废话不再多说,接下来,本文将具体介绍libevent的使用。
libevent简介
首先简单介绍一下libevent,它是一个开源的轻量级网络库,具有良好的跨平台特性,支持Linux, FreeBSD, OpenBSD, NetBSD, Mac OS X, Solaris, Android等各种平台,支持多种不同的I/O多路复用机制。它采用的是基于事件驱动(event-driven)的模型,这里的事件包括有:I/O,定时器,信号等。
event和event_base是其最核心的部分。
event_base
一、创建event_base
有两种方式。
第一,默认方式创建;
struct event_base *event_base_new(void);
默认情况下,libevent会选择该平台下效率最高的I/O多路复用机制作为其backend使用的method。
第二,自定义方式创建;
struct event_config *event_config_new(void);struct event_base *event_base_new_with_config(const struct event_config *cfg);void event_config_free(struct event_config *cfg);首先,调用event_config_new()函数创建一个event_config对象,然后调用下面即将讲到的几个接口来指定method属性,再调用event_base_new_with_config()创建对应的event_base,创建完以后,event_config就没用了,别忘了释放掉。libevent为我们提供的这些接口函数有:
int event_config_avoid_method(struct event_config *cfg, const char *method);int event_config_require_features(struct event_config *cfg, enum event_method_feature feature);int event_config_set_flag(struct event_config *cfg, enum event_base_config_flag flag);
第一个,很直白地告诉libevent不希望使用哪个method,传入参数就是method的名字,比如说"epoll";
第二个,告诉libevent需要支持哪些features,包括有:
EV_FEATURE_ET 支持边沿触发方式(epoll)
EV_FEATURE_O1 事件插入删除查找的时间复杂度均为O(1)(epoll)
EV_FEATURE_FDS 支持任意的文件描述符,不止socket一种(select、poll)
第三个,设置flag,具体这里不再一一说明。
需要明确的是,上面三个接口函数若成功均返回0,-1则表示失败。
若平台没有满足指定要求的method,调用event_base_new_with_config()将返回NULL表示失败。
二、销毁event_base
方法很简单,直接调用函数
void event_base_free(struct event_base *base);
三、设置event_base的优先级
相关接口函数有:
int event_base_priority_init(struct event_base *base, int n_priorities);int event_base_get_npriorities(struct event_base *base);
调用第一个函数,优先级被设置为0~n_priorities-1,其中0表示最高。
第二个函数返回的是该event_base所支持的事件优先级个数。
四、其它辅助函数
const char **event_get_supported_methods(void);
获取本平台所支持的所有methods。
!注意:这个函数返回的是一个字符串数组,内存空间是由该函数申请的,但不需要程序员去手动释放(如果手动释放的话,也不会出现bug)。(具体原因见代码实现)
const char *event_base_get_method(const struct event_base *base);
获取本event_base的backend所使用的method。
enum event_method_feature event_base_get_features(const struct event_base *base);获取本event_base的backend所使用的method属性。返回的是对应的bitmask值。
To Be Continued...
- 学习使用libevent(一)
- Libevent学习笔记(一):基本使用
- 【libevent】libevent库学习总结(一)——基础
- libevent源码学习(一)event事件
- 【libevent】源码学习(一)--开篇
- libevent学习一
- libevent 学习笔记 一
- libevent 学习笔记 一
- libevent(一):简单使用
- libevent学习笔记 一、基础知识
- libevent学习笔记 一、基础知识
- libevent学习笔记 一、基础知识
- libevent(一)
- (一)编译libevent
- libevent(一)
- libevent使用(一)-----基础配置
- 深入浅出libevent的使用(一)
- Libevent参考手册第一章:设置libevent(一)
- Centos 安装Flash控件
- Spring in Action 3 - Spring’s p namespace
- 基于S3C2440的linux-3.6.6移植——LED驱动
- Spring3 Junit测试
- 希尔排序shellsort
- 学习使用libevent(一)
- 视频编解码---x264用于编码,ffmpeg用于解码
- 用JAVA写的一个每月的日历程序,效果看正文。
- 多核时代的移动开发(一)-函数式编程思想到来
- Struts2入门到精通一——————Struts2初步
- 小结_02:《重构:改善既有代码的设计》
- Android 关于高仿 WIN8系统磁贴点击下沉倾斜效果的应用说明
- android cocos2d-x引擎优秀文章收集
- UVA 147 Dollars