(十二)定时事件集成到多路IO机制

本文详细介绍了如何将定时事件集成到libevent的主循环中,通过timeout_next和timeout_process两个关键函数,计算等待时间和处理超时事件。在主循环中,利用多路I/O机制如epoll的定时功能,集中处理定时事件,提高效率。
摘要由CSDN通过智能技术生成

前言

在本小节中,我们将展开对定时事件的研究。首先还是和研究信号事件部分一样,先看看它是如何集成到多路I/O中的(或者说是如何与event_base联系起来的)。

如何将定时事件集成到主循环中

由于seletc、poll、epoll这类多路I/O机制支持定时,所以将定时事件集成到主循环中比起信号事件容易的多。我们只需要将定时事件注册到小根堆上,然后根据堆顶(最短超时事件)来计算多路I/O机制需要等待的最大超时时间,这样超时之后,就可以处理就绪的定时事件了。

在主循环中,有这样一段代码:

if (!base->event_count_active && !(flags & EVLOOP_NONBLOCK)) {
/* 没有激活的事件并且是非阻塞时 */
        timeout_next(base, &tv_p);
} else {
        /*
         * if we have active events, we just poll new events
         * without waiting.
         */
        evutil_timerclear(&tv);
}
...
res = evsel->dispatch(base, evbase, tv_p);
...
timeout_process(base);

timeout_next用于计算主循环最大的等待时间,这里将tv_p赋值为等待的时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值