我是靠谱客的博主 眯眯眼御姐,最近开发中收集的这篇文章主要介绍C++ Libevent 基础Libevent的入门基础,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Libevent的入门基础

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

根节点 基地 event_base

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

struct event_base *event_base_new(viod);

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

void event_base_free(struct event_base *)

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

int event_reinit(struct event_base *base)

创建事件循环, event_loop

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

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

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

int event_base dispatch(struct event_base *base);

调用该函数,相当于没有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;
}

事件驱动 event

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

struct event *event_new(struct event_base *base,evutil_socket_fd,short events,event_callback_fn cb,void *arg)
  • 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      // 边缘触发,如果底层模型支持

event_callback_fn cb 回调函数 原型如下

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

上树 下树 释放

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

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

下树:与上树相反

int event_del(struct event *ev);

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

void event_free(struct event *ev)

最后

以上就是眯眯眼御姐为你收集整理的C++ Libevent 基础Libevent的入门基础的全部内容,希望文章能够帮你解决C++ Libevent 基础Libevent的入门基础所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部