libevent源码学习(四)定时器Timer

libevent的Timer事件集成到事件主循环中相对直观简单,利用小根堆管理,确保超时时间准确。堆的插入、删除操作高效,获取最小值快速。文章探讨了如何根据最小超时时间设置系统I/O timeout,并分析了libevent如何利用堆的特性实现Timer事件管理。
摘要由CSDN通过智能技术生成

与signal相比,Timer事件的集成会直观和简单很多。

集成到事件主循环

因为系统的I/O机制像selectepoll_wait都允许程序制定一个超时时间:

//
int select(int nfds, fd_set *readfds, fd_set *writefds,
                  fd_set *exceptfds, struct timeval *timeout);

//
int epoll_wait(int epfd, struct epoll_event *events,
                      int maxevents, int timeout);

即使没有I/O事件的发生,也能保证系统调用在Timeout时间内返回。

那么根据所有timer事件的最小超时时间来设置系统I/O的timeout时间,当系统I/O返回时,再激活所有就绪的Timer事件就可以了。

event_base_loop事件循环中,我们很轻易就能找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值