libevent基础函数整理

 

1、  struct event_base *event_base_new(void);初使化一个event base对象。

2、  void event_base_free(struct event_base *base);释放一个event base对象

3、  int event_reinit(struct event_base *base);重新初使化一个已经存在的eventbase对象

4、  int event_base_loop(struct event_base *base, int flags);

此函数是循环的监控在base中注册的事件,直到没有注册的事件。

Flags包含两个值,为EVLOOP_ONCE时,等待事件的发生然后执行所有的事件,结束,只执行一次;EVLOOP_NONBLOCK时,只检查当前有没有活动的事件然后执行他们。

5、  int event_base_dispatch(struct event_base *base);这个函数与event_base_loop没有设置flag时的功能相同。

6、  int event_base_loopexit(struct event_base *base, const structtimeval *tv);退出循环,等待tv个时间后退出,如果tv为NULL则没有延迟,并且将所有的活动的事件都执行完之后才退出,如果当前没有event loop则对下次的eventloop有效。

7、  int event_base_loopbreak(struct event_base *base);退出循环,不等待活动事件执行完,直接退出,如果当前没有eventloop,函数不起任何的作用。

8、  int event_base_gettimeofday_cached(struct event_base *base,structtimeval *tv_out);获得当前正在执行的callback函数执行的时间,如果没有正在执行的函数,则返回当前时间。

9、  void event_base_dump_events(struct event_base *base, FILE *f);列出f在base中注册的所有的事件即状态。

10、 libevent可以监听的事件有

1)  对一个文件描述符的读或写

2)  对一个文件描述符正变成读或写(只针对边缘触发的IO)

3)  时间超时

4)  一个信号发生

5)  用户触发事件

11、 事件对应的接口为:

#defineEV_TIMEOUT      0x01

#defineEV_READ         0x02

#defineEV_WRITE        0x04

#defineEV_SIGNAL       0x08

#defineEV_PERSIST       0x10

#defineEV_ET           0x20

12、  回调函数的接口:typedef void (*event_callback_fn)(evutil_socket_t, short, void *);第一个参数为事件发生在那个文件描述符上,第二个参数描述了具体那个事件,第三个参数是用户传进来的参数。

13、 struct event *event_new(structevent_base *base, evutil_socket_t fd, short what, event_callback_fn cb, void*arg);初使化一个event,使其指定到一个base,fd为监听的描述符,what是对那些事件进行监听,回调函数有回调函数的参数

14、  int event_add(struct event *ev,const struct timeval *tv);这个函数是将event pending到base上,只有经过pending的event才会被监控,如果enent初使化为EV_PERSIST则pending永远有效,否则callback func被调用后就失效了,要想再生效则需要重新pending,如果设置了tv,则过去tv个时间后将触发超时事件。

15、 int event_del(struct event*ev);可以将已经pending的enent删除

16、  int event_assign(struct event*event, struct event_base *base, evutil_socket_t fd, short what, void(*callback)(evutil_socket_t, short, void *), void *arg);为了消除版本的差异实现这个函数,所有的都跟event_new一样,只是多了一个event参数,并且要求event没有被初使化过。

17、  int event_priority_set(structevent *event, int priority);可以改变event的优先级,改变回调函数的执行顺序,priority值的范围为从0到base的priority的值减1,值越小越优先。当有多个priority被设置时,先运行有高优先级的事件,运行完成后再检查有没有高优先级的事件,如果没有才运行低优先级的事件。通过event_base_priority_init(base, 2);设置base的优先级。

18、evutil_socket_t,大部分的操作系统上socket为一个int型,而在windows中为SOCKET类型,为了系统兼容我们定义了此类型如下:

#ifdefWIN32

#defineevutil_socket_t intptr_t

#else

#defineevutil_socket_t int

#endif


 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值