libevent学习笔记六——集成定时器事件到事件主循环

博客介绍了libevent库的使用,包括使用两个接口初始化event库和一个event,添加定时器事件到event,其中涉及初始化小根堆堆空间并将event插入小根堆。还阐述了进入事件主循环的操作,如取出小根堆堆顶timeout,处理超时事件等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 libevent库初始化,使用以下两个接口初始化event库,并且初始化一个event
struct event_base * event_base_new(void);
int event_assign(struct event *ev, struct event_base *base, evutil_socket_t fd, short events, void (*callback)(evutil_socket_t, short, void *), void *arg);
2、添加定时器事件到event
int event_add(struct event *ev, const struct timeval *tv);

对于定时器事件,该接口所做主要工作:
1)、初始化小根堆堆空间
2)、将该event插入到小根堆
注意小根堆是由base维护的

3、 进入事件主循环
int event_base_dispatch(struct event_base *event_base);

在事件主循环中调用接口

static int timeout_next(struct event_base *base, struct timeval **tv_p)		

取出小根堆堆顶的timeout,注意这个timeout是相对于绝对时间的相对时间使用该timeout令接口 base->evsel->dispatch(base, tv_p)阻塞等待;
该接口返回后调用接口timeout_process(base)将超时事件插入到激活链表,并更新变量event_count_active;
然后调用接口event_process_active(base) 处理激活链表任务对应的回调函数即超时事件。

参考资料

libevent-2.1.8-stable源码time-test.c
小根堆
活跃事件管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值