当前位置:   article > 正文

C++ Libevent 基础_c libevent

c libevent

Libevent的入门基础

Libevent 是 C语言编写的、轻量级事件通知库

根节点 基地 event_base

使用Libevent之前,需要先申请一个 event_base 结构,创建根节点

struct event_base *event_base_new(viod);
  • 1

申请到event_base结构体,用完后,通过 event_base_free 释放

void event_base_free(struct event_base *)
  • 1

如果你fork出一个子进程,在子进程中也想用event_base,

int event_reinit(struct event_base *base)
  • 1

创建事件循环, event_loop

Libevent在基地打好之后,需要等待事件的产生,

int event_base_loop(struct event_base *base,int flags);
  • 1
#define EVLOOP_ONCE 0x01     // 只触发一次,如果事件没有被触发,阻塞等待
#define EVLOOP_NONBLOCK 0x02 //非阻塞方式,非阻塞方式
  • 1
  • 2

而大多数情况下,我们都调用 libevent 给我们提供的另外一个api

int event_base dispatch(struct event_base *base);
  • 1

调用该函数,相当于没有flag标志位的 event_base_loop, 程序将会一直运行,直到没有检测事件了,我们手动退出。

int event_base_loopexit(struct event_base *base,const struct timeval *tv); // 延迟退出事件
int event_base_loopbreak(struct event_base *base); //马上退出

struct timeval {
    long tv_sec;
    long tv_usec;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

事件驱动 event

event_new 就是要创建一个上树节点

struct event *event_new(struct event_base *base,evutil_socket_fd,short events,event_callback_fn cb,void *arg)
  • 1
  • struct event_base *base 对应的根节点
  • evutil_socket_fd 要监听的文件描述符
  • short events 要监听的事件
  • event_callback_fn cb 回调函数
  • void *arg 回调函数的参数

具体解释

short events 要监听的事件

#define EV_TIMEOUT 0x01  // 超时事件
EV_READ    // 读事件
EV_WRITE   // 写事件
EV_SIGNAL  // 信号事件
EV_PERSIST // 周期性触发 一般的都要 位或|这个,不然只会监听一次
EV_ET      // 边缘触发,如果底层模型支持
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

event_callback_fn cb 回调函数 原型如下

typedef void (*event_callback_fn)(evutil_socket_t fd,short events,void *args)
  • 1

上树 下树 释放

上树 :将 非未决态 变为 未决态

int event_add (*event *ev,const struct timeval *timeout);
  • 1

下树:与上树相反

int event_del(struct event *ev);
  • 1

释放:如果节点不再使用,需要释放

void event_free(struct event *ev)
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/542061
推荐阅读
相关标签
  

闽ICP备14008679号