C-libev 示例代码阅读

第一次阅读libev代码,学习用

环境:CentOS 8,QT;可以运行

#include <stdio.h>
#include <ev.h>
#include <signal.h>
#include <sys/unistd.h>
#include <string.h>

//libev的结构框架:定义监视器,定义监视器的回调函数,将监视器与回调函数绑定(监视器的初始化),监视器在驱动器注册,驱动器跑起来。


//这三个是监控器被触发的时候要执行的回调函数
//回调函数的通用形式:
//void xx_name (struct ev_loop *main_loop, ev_xxx *xx_w, int event)
//返回类型是void,参数1是预制的全局驱动器,参数2是具体的事件驱动器,参数3
void io_action(struct ev_loop  *main_loop,ev_io *io_w, int e)
{
    int rst;
    char buf[1024];
    memset(buf,0,sizeof (buf));
    puts("in io cb");
    read(STDIN_FILENO,buf,sizeof (buf));
    buf[1023]='\0';
    printf("Read in a string %s",buf);
    ev_io_stop(main_loop,io_w);
}

void timer_action(struct ev_loop *main_loop,ev_timer *timer_w, int e)
{
    puts("in timer cb");
    ev_timer_stop(main_loop,timer_w);
}

void signal_action(struct ev_loop *main_loop,ev_signal *signal_w, int e)
{
    puts("in signal cb");
    ev_signal_stop(main_loop,signal_w);//stop函数将监视器从驱动器里面注销,不再起作用
    ev_break(main_loop,EVBREAK_ALL);//跳出驱动器的事件循环,ALL是跳出全部
}

int main(int argc, char *argv[])
{
    //这三个是监控器
    //libev定义了多种监视器,每种监视器的定义规则是lv_xxx,xxx是监视器的类型
    //such as ev_io,ev_timer,ev_signal
    //每种监视器是一个typedef的struct结构体,即经过宏定义,全称是 struct lv_io{}

    ev_io io_w;
    ev_timer timer_w;
    ev_signal signal_w;

    //定义一个事件驱动器结构类型的 main_loop,用ev_default_loop(0)生成一个全局驱动器

    struct ev_loop *main_loop = ev_default_loop(0);

    ev_init(&io_w,io_action);//注册监视器,即将监视器与回调函数绑定
    ev_io_set(&io_w,STDIN_FILENO,EV_READ);//设置触发条件

    ev_init(&timer_w,timer_action);
    ev_timer_set(&timer_w,2,0);

    ev_init(&signal_w,signal_action);
    ev_signal_set(&signal_w,SIGINT);

    ev_io_start(main_loop,&io_w);//将监视器注册到事件驱动器上
    ev_timer_start(main_loop,&timer_w);
    ev_signal_start(main_loop,&signal_w);

    ev_run(main_loop,0);//事件驱动器跑起来

    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橙子砰砰枪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值