libev学习笔记
libev学习笔记
1.什么是libev?
libev是一个强大的网络reactor,支持多种事件(信号,I/O,定时器…..)
1 |
|
2.使用方法
1.创建ev_loop对象
1 |
|
2.绑定用户数据以及reactor的开始与退出
1 |
|
3.设置轮询时间
1 |
|
4.Watcher
watcher 相当于eventhandler,一般ev_loop用于创建libev里面的reactor对象,而watcher就是事件触发后处理事件的模块,通常绑定fd,以及发生事件后处理事件的回调函数,下列的type用于区分不同的watcher
watcher的状态
initialiased 已经初始化
active 调用start进行注册
pending 已经触发事件但是还没有处理
inactive 调用stop注销.这个状态和已经初始化是一样的
1
2
3
4
5
6
7
8
9
10
11
12typedef void (*)(struct ev_loop *loop, ev_TYPE *watcher, int revents) callback; // callback都是这种类型
ev_init (ev_TYPE *watcher, callback); // 初始化watcher
ev_TYPE_set (ev_TYPE *watcher, [args]); // 设置watcher
ev_TYPE_init (ev_TYPE *watcher, callback, [args]); // 通常使用这个函数最方便,初始化和设置都在这里
ev_TYPE_start (loop, ev_TYPE *watcher); // 注册watcher
ev_TYPE_stop (loop, ev_TYPE *watcher); // 注销watcher
ev_set_priority (ev_TYPE *watcher, int priority); // 设置优先级
ev_feed_event (loop, ev_TYPE *watcher, int revents); // 这个做跨线程通知非常有用,相当于触发了某个事件。
bool ev_is_active (ev_TYPE *watcher); // watcher是否active.
bool ev_is_pending (ev_TYPE *watcher); // watcher是否pending.
int ev_clear_pending (loop, ev_TYPE *watcher); // 清除watcher pending状态并且返回事件
5.实例
1 |
|
6.和epoll对比
ev_loop相当于struct event_base *base,监听集合
watcher相当于struct event *event,但是相比于epoll中的event,watcher中设置了相应的回调函数。
ev_run相当于epoll_wait函数开始监听事件的到来,到事件到来的时候调用相应的回调函数处理相应的事件
libev学习笔记
https://dreamaccount.github.io/2022/04/17/libev学习笔记/