libevent库简单使用

一、libevent库简介

Libevent是一个用于开发可扩展性网络服务器的基于事件驱动(event-driven)模型的网络库。Libevent有几个显著的亮点: 
(1)事件驱动(event-driven),高性能;
(2)轻量级,专注于网络,不如 ACE 那么臃肿庞大; 
(3)源代码相当精炼、易读; 
(4)跨平台,支持 Windows、Linux、*BSD和 Mac Os; 
(5)支持多种 I/O多路复用技术, epoll、poll、dev/poll、select 和kqueue 等; 
(6)支持 I/O,定时器和信号等事件; 
(7)注册事件优先级; 
 Libevent 已经被广泛的应用,作为底层的网络库;比如 memcached、 Vomi t、 Nylon、 Netchat等等。

以上来自百度百科:

二、libevent简单使用

libevent有以下几个主要函数:

(1)初始化libevent库

1 struct event_base * event_init(void) /*初始化libevent库, 返回一个struct event_base 指针*/
2 
3 struct event_base * event_base_new(void) /*同样是初始化libevent库,官方后出的用来替代evnet_init()的*/
4 //区别就是前者是线程安全的、而后者是非线程安全的,后者在其官方说明中已经被标志为过时的函数、且建议用前者代替

(2)初始化事件ev,设置回调函数和关注的事件

1 void event_set(struct event *ev, int fd, short event, void (*cb)(int, short, void *), void *arg) /*初始化事件,并且设置回调函数和关注的事件*/
2 /*
3 ev:    执行要初始化的 event 对象;
4 fd:    该 event 绑定的“句柄”,对于信号事件,它就是关注的信号;
5 event:在该 fd 上关注的事件类型,它可以是 EV_READ, EV_WRITE, EV_SIGNAL;
6 cb:    这是一个函数指针,当 fd 上的事件 event 发生时,调用该函数执行处理,它有三个参数,
7     调用时由 event_base 负责传入,按顺序,实际上就是 event_set 时的 fd, event 和 arg;
8 arg:    传递给 cb 函数指针的参数*/
9     

(3)设置event所属的event_base

1 event_base_set(base, &ev);
2 
3 //指明 event 要注册到哪个 event_base 实例上

(4)event_add添加事件

1 event_add(&ev, timeout);
2 //添加事件并设置超时时间

(5)event_base_dispatch循环等待就绪事件并处理

1 event_base_dispatch(base);

 未完待续。。。。。。。。。。。。。。。。

原文地址:https://www.cnblogs.com/wenqiang/p/5404081.html