libevent evutil_gettime_monotonic_

int
evutil_gettime_monotonic_ ( struct evutil_monotonic_timer * base,
struct timeval * tp)
{
     struct timespec ts;
// base-> monotonic_clock < 0说明不支持monotonic time,
// monotonic_clock的设置在 evutil_configure_monotonic_time_里面
     if (base-> monotonic_clock < 0 ) {
//获取实时时间
         if ( evutil_gettimeofday (tp, NULL ) < 0 )
             return - 1 ;
//如果用户向前调整了实时,那么调整实时时间
         adjust_monotonic_time (base, tp);
         return 0 ;
    }
// 获取monotic time
     if ( clock_gettime (base-> monotonic_clock , & ts) == - 1 )
         return - 1 ;
    tp-> tv_sec = ts. tv_sec ;
    tp-> tv_usec = ts. tv_nsec / 1000 ;

     return 0 ;
}

adjust_monotonic_time ( struct evutil_monotonic_timer * base,
struct timeval * tv)
{
     evutil_timeradd (tv, & base-> adjust_monotonic_clock , tv);
// 当前时间是否比上次的时间小,如果小,说明用户先前调整了时间
     if ( evutil_timercmp (tv, & base-> last_time , < )) {
         /* Guess it wasn't monotonic after all. */
         struct timeval adjust;
         evutil_timersub ( & base-> last_time , tv, & adjust); // 计算用户向像前调整了多长时间
        evutil_timeradd ( & adjust, & base-> adjust_monotonic_clock ,
         & base-> adjust_monotonic_clock ); // 这次向前调整的时间加上以前向前调整的时间等于新的调整的时间
         * tv = base-> last_time ; // 由于用户向前调整了时间,所以现在的真实时间,无法确定,所以只能将就用上次的时间
    }
    base-> last_time = * tv; // 记录当前时间
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值