libev学习一

1.libev简介
Libev是一个event loop:向libev注册感兴趣的events,比如Socket可读事件,libev会对所注册的事件的源进行管理,并在事件发生时触发相应的程序。

2.原理
通过event watcher来注册事件,watcher是一个结果体。

libev通过分配和注册watcher对不同类型的事件进行监听。不同事件类型的watcher又对应不同的数据类型,watcher的定义模式是struct ev_TYPE或者ev_TYPE,其中TYPE为具体的类型。当前libev定义了如下类型的watcher:

ev_io

ev_timer

ev_periodic

ev_signal

ev_child

ev_stat

ev_idle

ev_prepare and ev_check

ev_embed

ev_fork

ev_cleanup

ev_async

3.实例分析
下面是一个libev使用的例子,通过注册io类型的watcher来监视STDIN可读事件的发生:

//回调函数

static void my_cb (struct ev_loop*loop, ev_io *w, int revents)

{

ev_io_stop (w);

ev_break (loop, EVBREAK_ALL);

}

//设置预制的全局驱动器

struct ev_loop *loop = ev_default_loop(0);

//初始化和设置触发条件

ev_io stdin_watcher;,

ev_init (&stdin_watcher, my_cb);

ev_io_set (&stdin_watcher,STDIN_FILENO, EV_READ);

ev_io_start (loop, &stdin_watcher);

//开始循环

ev_run (loop, 0);

上面的示例代码中用到的与watcher相关的函数有ev_init,ev_io_set,ev_io_start,ev_io_stop。ev_init对一个watcher的与具体类型无关的部分进行初始化。ev_io_set对watcher的与io类型相关的部分进行初始化,显然如果是TYPE类型那么相应的函数就是ev_TYPE_set。可以采用ev_TYPE_init函数来替代ev_init和ev_TYPE_set。ev_io_start激活相应的watcher,watcher只有被激活的时候才能接收事件。ev_io_stop停止已经激活的watcher。

event loop的概念。示例程序中的ev_run、ev_break以及ev_loop_default都是event loop控制函数。event loop定义为struct ev_loop。有两种类型的event loop,分别是default类型和dynamically created类型,区别是前者支持子进程事件。ev_default_loop和ev_loop_new函数分别用于创建default类型或者dynamically created类型的event loop。

event_run函数告诉系统应用程序开始对事件进行处理,有事件发生时就调用watchercallbacks。除非调用了ev_break或者不再有active的watcher,否则会一直重复这个过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值