Libev源码分析04:Libev中的相对时间定时器

本文深入剖析Libev中的ev_timer结构和功能,包括其作为相对时间定时器的工作机制,如何设置、启动、停止超时监视器,以及在时间调整时如何更新定时器。通过详细解释数据结构、相关函数和实例,揭示了ev_timer如何确保在给定时间点触发超时事件,并能周期性重复。
摘要由CSDN通过智能技术生成

         Libev中的超时监视器ev_timer,就是简单的相对时间定时器,它会在给定的时间点触发超时事件,还可以在固定的时间间隔之后再次触发超时事件。

         所谓的相对时间,指的是如果你注册了一个1小时的超时事件,然后调整系统时间到了去年的一月份,该超时事件依然会在1个小时之后触发。

 

一:数据结构

1:超时监视器ev_timer结构:

typedef struct ev_timer
{
    int active; 
    int pending;
    int priority;
    void *data;
    void (*cb)(struct ev_loop *loop, struct ev_timer *w, int revents);  

    ev_tstamp at;
    ev_tstamp repeat; /* rw */
} ev_timer;

         其中的前五个成员是监视器的公共成员,其中的active在超时监视器中有特殊作用,那就是标明该监视器在堆数组timers中的下标。后两个成员at和repeat是ev_timer特有的。at表明定时器第一次触发的时间点,该是是根据mn_now设置的,repeat必须大于等于0,它表示每隔repeat秒,该定时器再次触发。如果repeat为0,表明该定时器只触发一次。

 

2:ev_watcher_time结构

typedef struct ev_watcher_time
{
    int active; 
    int pending;
    int priority;
    void *data;
    void (*cb)(struct ev_loop *loop, struct ev_watcher_time *w, int revents);  

    ev_tstamp at;
} ev_watcher_time;

typedef ev_watcher_time *WT;

        ev_watcher_time的结构与ev_timer几乎一样,只是少了最后一个成员。该结构其实是ev_timer和ev_periodic的父类,它包含了ev_timer和ev_periodic的共有成员。

 

3:堆元素ANHE

#if EV_HEAP_CACHE_AT
    typedef struct 
    {
        ev_tstamp at;
        WT w;
    } ANHE;
#else  
typedef WT ANHE;
#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值