【转】Libevent使用摘要


1 头文件与编译标志 

http://hi.baidu.com/baowup/item/732c590d956eef364ac4a300
头文件 event.h 。 
编译标志 -levent 。(gcc -levent ... ) 

2 建立event句柄 

struct event ev; 
event_init(); 
event_set(&ev,s,EV_READ|EV_PERSIST,callback,&ev); 
event_add(&ev,NULL); 
event_dispatch(); 

3 函数声明格式 
struct event_base* event_init() : 
初始化事件API。 

void event_set(struct event* ev, int fd, short events, void(*fn)(int, short, void*), void* arg) : 
构造一个事件结构用于准备添加。 
ev为事件句柄, 
fd为文件描述符, 
events为几种事件的组合, 
然后是回调函数和附加传输参数。 
可用的events组合包括: EV_TIMEOUT 、 EV_READ 、 EV_WRITE 、 EV_SIGNAL 、 EV_PERSIST 。 
fn回调函数的第一个参数为文件描述符, 
第二个是事件常量数字, 
第三个为传递过来的附加参数。 


#define EV_TIMEOUT 0x01 
#define EV_READ 0x02 
#define EV_WRITE 0x04 
#define EV_SIGNAL 0x08 
#define EV_PERSIST 0x10 


int event_add(struct event* ev, struct timeval* tv) : 
添加事件到监控器,可以指定超时为参数tv。 

int event_del(struct event* ev) : 
删除事件。 


4 超时事件 
事件的超时功能是在 event_add() 函数中的第二个参数指定的。是一个timeval结构体。 
当tv参数为NULL时就没有超时。 
而当传递进去timeval结构体时就可以提供理论上高达1微秒的精度的超时。 
这里一个超时示例: 

struct timeval tv; 
tv.tv_sec=1; 
tv.tv_usec=0; 
event_add(&ev,tv); 

超时发生时可以在回调函数fn中的event参数得到值为EV_TIMEOUT的事件, 
注意不要与其他类型事件混淆。 


5 初始化小心 

注意声明的 struct event 结构体实例的作用域, 
在 main() 函数或者全局的尚且没事。 
如果只是在某个函数内部声明,则出函数后该结构体被回收则会出错。最好将这个结构体放在堆里面: 

struct event* ev_accept=(struct event*)malloc(sizeof(struct event)); 




6 回调函数 

回调函数声明格式: 

void fn(int fd, short event, void* arg); 

其中fd为文件句柄,可以按照特定的环境使用不同的读写函数。 
event为事件类型,见如上定义的5种事件类型中的前4种。 

注意需要在回调函数中再次调用该事件的 event_add() 函数来确保事件继续下去。 
所以至少需要使用arg来传递ev结构体, 
如果需要传递的东西很多,则可能需要用arg来传递一个自定义的结构体,包含多个结构体的指针
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值