函数的作用是: 比较当前事件时间和缓存累计时间 系统使用了tv_cache缓存累计时间,超过一秒更新到当前系统时间 static void
timeout_correct(struct event_base *base, struct timeval *tv)
{
struct event **pev;
unsigned int size;
struct timeval off; if (use_monotonic) 如果用了timespec直接返回
return; 是不是时间落后了? /* Check if time is running backwards */
gettime(base, tv); 如果缓冲累积的时间秒到达一秒以上,调用gettimeofday获取当前时间
if (evutil_timercmp(tv, &base->event_tv, >=)) { tv_cache缓存累计时间,是否大过事件的时间
base->event_tv = *tv; 大过了,则以tv_cache缓存时间为准
return;
} event_debug(("%s: time is running backwards, corrected",
__func__)); 获取落后的时间差
evutil_timersub(&base->event_tv, tv, &off); /*
* We can modify the key element of the node without destroying
* the key, beause we apply it to all in the right order.
*/ 如果事件时间没有超过缓存时间
pev = base->timeheap.p; 事件时间数组p指针
size = base->timeheap.n; 数组大小
for (; size-- > 0; ++pev) { 遍历数组所有超时时间,把时间减回来
struct timeval *ev_tv = &(**pev).ev_timeout;
evutil_timersub(ev_tv, &off, ev_tv);
}
} 函数的作用是:系统使用了tv_cache缓存累计时间,超过一秒更新到当前系统时间static int
gettime(struct event_base *base, struct timeval *tp)
{
if (base->tv_cache.tv_sec) { 如果缓冲的时间秒大于0,即1秒
*tp = base->tv_cache; 拷贝回给参数tp
return (0);
} #if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
if (use_monotonic) {
struct timespec ts; if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1)
return (-1); tp->tv_sec = ts.tv_sec;
tp->tv_usec = ts.tv_nsec / 1000;
return (0);
}
#endif 如果没有到1秒,调用gettimeofday获取当前时间 return (evutil_gettimeofday(tp, NULL));
}
相关文章
- 【Android】关于连续多次点击控件的控制方案(新建监听类)
- 关于shiro权限控制 cannot be cast to
- 关于 cmd 控制台默认代码页编码的几种方法
- 关于windows IIS日志时间与系统时间相差8小时的问题
- Linux history 命令详解:如何查看、显示时间、清空、重复和控制历史记录
- 关于时间格式 2016-08-9T10:01:54.123Z 20160809100154.123Z 处理方法
- 关于Unix/Linux的终端、伪终端、控制台和shell
- 关于查询数据库时间(Data类型),查出数据出现时分秒00:00:00,@JsonFormat与@DateTimeFormat注解的使用
- 关于向Mysql数据库中插入时间只有日期没有时分秒的问题
- sas数字转日期格式_一个关于sas日期时间读入格式的问题