当前位置:   article > 正文

libevent 常用函数最全讲解_libevent 解析参数

libevent 解析参数

目录

1、事件处理框架

2、设置事件循环

3、终止事件循环

4、事件的创建与释放

5、事件的添加和删除

1、事件处理框架

  1. //头文件
  2. #include <event2/event.h>
  3. //创建一个事件处理框架
  4. struct event_base * event_base_new(void)
  5. //释放一个事件处理框架
  6. //参数: event_base_free(struct event_base *base)
  7. void event_base_free(struct event_base *base);
  8. //查看底层支持的IO转换模型
  9. const char** event_get_supported_methods(void)
  10. //查看当前实际处理框架使用的IO转接模型
  11. const char *event_base_get_method(const struct event_base *base);

2、设置事件循环

  1. //头文件
  2. #include <event2/event.h>
  3. //启动事件处理框架中的事件循环
  4. //参数: event_base_new() 的返回值
  5. /*
  6. 事件检测过程中的特点
  7. 举例: 检测读事件
  8. -如果对方没有发送数据过来,会一直持续检测,等待事件被触发
  9. -检测到有读事件,默认情况下只会被处理一次,事件循环就停止了,只能接受一次数据
  10. -如果要持续的接收数据,需要额外设置
  11. */
  12. //这个函数被调用,内部会进行事件检测,代码阻塞在这一行
  13. int event_base_dispatch(struct event_base *base);

3、终止事件循环

  1. //头文件
  2. #include <event2/event.h>
  3. //表示一个时间段,tv_sec+tv_usec
  4. struct timeval{
  5. long tv_sec;
  6. long tv_usec; //微秒
  7. };
  8. //假设事件循环正在继续,并且在处理一个实际纪有效的事件,代用这个函数终止事件循环
  9. //事件循环不会马上终止,在tv指定的时长之后,事件就被终止了
  10. int event_base_loopexit(struct event_base *base,const struct timeval *tv);
  11. 参数:
  12. -base:事件处理框架
  13. -tv: 在指定的时间段之后,退出事件循环
  14. //马上终止事件循环
  15. int event_base_loopbreak(struct event_base *base);

4、事件的创建与释放

  1. //头文件
  2. #include <event2/event.h>
  3. #define EV_TIMEOUT 0x01 //定时器超时
  4. #define EV_READ 0x02 //读,检测读缓冲区是否有数据
  5. #define EV_WRITE 0x04 //写,检测写缓冲区是否可写
  6. #define EV_SIGNAL 0x08 //信号
  7. #define EV_PERSIST 0x10 //设置事件被重复检测
  8. #define EV_ET 0x20 //边沿模式
  9. typedef void (*event_callback_fn)(evutil_socket_t fd, short what,void *arg);
  10. 参数:
  11. -fd: 文件描述符,是event_new()第二个参数
  12. -what: 记录了实际文件描述符触发的事件
  13. -arg: event_new()的最后一个参数
  14. //创建一个需要检测的事件,struct event 就是创建出的事件
  15. //evutil_socket_t == int
  16. //event_new()函数的本质就是对一个文件描述符进行封装
  17. struct event* event_new(struct evnet_base *base, evutil_socket_t fd,
  18. short what, event_callback_fn cb, void *arg);
  19. 参数:
  20. -base:事件处理框架
  21. -fd: 一个文件描述符,比如管道的文件描述符,套接字通信的文件描述符
  22. -what:要检测的事件,检测第二个参数fd的事件
  23. -EV_READ: 读事件
  24. -EV_WRITE:写事件
  25. -EV_SIGNAL:信号事件(linux)
  26. -EV_ET: 设置边沿模式
  27. -cb:函数指针对应一个回调函数,当检测的事件被触发,这个函数就被调用
  28. -arg: 作为实参传递给回调函数cb
  29. void event_free(struct event *event);

5、事件的添加和删除

  1. struct timeval{
  2. long tv_sec; //秒
  3. long tv_usec; //微秒
  4. };
  5. //事件被创建之后,不能被事件处理框架直接检测,需要做添加处理
  6. int event_add(struct event *ev, const struct timeval *tv)
  7. 参数:
  8. -ev: 通过 event_new() 创建得到的事件
  9. -tv: 超时时长,如果不用指定为NULL
  10. -检测了一个事件,并且在tv指定的时间段中没有被触发,这个事件对应的回调函数会被强制调用
  11. -如果指定为NULL,事件不触发,对应的回调函数就不被调用
  12. //被检测的事件从事件处理框架上删除
  13. int event_del(struct event *ev);
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/458489
推荐阅读
相关标签
  

闽ICP备14008679号