Libevent(三)

 我来答
清宁时光17
2022-07-28 · TA获得超过1.4万个赞
知道大有可为答主
回答量:6956
采纳率:100%
帮助的人:39.5万
展开全部

每个event_base保存一堆event,而且可以测验出哪些events是激活了的

如果一个event_base是设置为用了锁,那么就是线程安全的。然而,如果你有很多个线程要进行IO操作,那么对于每个线程都需要创建一个event_base

每一个event_base都有一个工具,这些工具是:
** select poll epoll kqueue devpoll evport win32 **
你也可以关闭某个特定的工具,例如 kqueue,通过设置EVENT_NOKQUEUE环境变量关闭。如果想要在程序里关闭,可以用event_config_avoid_method

event_base_new()函数从堆分配一个默认event_base对象,返回一个event_base的指针,出错返回NULL

接口

event_config是一个保存特定event_base信息的结构体。如果要特定的event_base,将event_config传给函数event_base_new_with_config()

接口

用event_config_new()去分配一个新的event_config对象,通过调用其他函数去设置event_config,用event_config_free去回收对象。

接口

直接通过字符串名称调用event_config_avoid_method()可以让Libevent不去用特指的工具。通过event_config_require_feature()告诉Libevent不去使用不能提供特指一系列特点的工具。event_config_set_flag设置一些标签。

EV_FEATURE_ET:
需要工具支持边缘触发IO

EV_FEATURE_O1
需要工具支持插入删除激活event的复杂度是O(1)

EV_FEATURE_FDS
需要工具提供各种文件描述符,而不只是套接字。

EVENT_BASE_FLAG_NOLOCK
不给此event_base设置线程锁,多线程不安全。

示例:创建特定event_base

调用函数 void event_base_free(struct event_base* base);

默认情况下,一个event_base只支持一个优先级,可以设置多个优先级通过调用接口

优先级参数至少为1,设置后优先级为0到n_priorities-1。Libevent支持的最高优先级为EVENT_MAX_PRIORITIES.

要找到当前event_base支持多少优先级通过调用函数

在创建新进程后还要继续使用之前event_base的话,最好重新初始化
接口:

早期版本的Libevent库有个全局默认event_base,可以被所有线程访问 ,如果绑定在这个默认的event_base上,这是线程不安全的。替代event_base_new()的是:

这个将当前要绑定的base设为分配的base,而不是默认的base。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式