1、概述
SylixOS中提供了时间变换相关接口,主要用于计算两个时间点之差以及根据入参时间timespec计算超时时间。
2、接口介绍
2.1 计算两个时间点之差
SylixOS中用于计算两个时间点之差的接口函数原型如下:
ULONG __timespecToTickDiff (const struct timespec *ptvS,
const struct timespec *ptvE);
INT64 __timespecToTickDiff64 (const struct timespec *ptvS,
const struct timespec *ptvE);
函数原型分析: - 函数返回两个时间点之差,并转换为tick数; - 参数ptvS是开始时间; - 参数ptvE是结束时间。 以上两个函数接口入参定义相同,唯一的区别是返回值分别是32位和64位数值。
2.2 根据timespec计算超时时间
SylixOS中用于计算超时时间的接口函数原型如下:
ULONG __timespecTimeoutTick (BOOL bRel, const struct timespec *ptv);
INT64 __timespecTimeoutTick64 (BOOL bRel, const struct timespec *ptv);
函数原型分析: - 函数返回超时时间(用tick数表示); - 参数bRel是判断相对时间还是绝对时间; - 若计算相对超时时间,参数ptv是当前时间与结束时间的间隔,需根据当前时间计算结束时间点;若计算绝对超时时间,则参数ptv即为结束时间点。 以上两个函数接口入参定义相同,唯一的区别是返回值分别是32位和64位数值。
3、 超时时间计算流程
根据上一章节可以看出计算超时时间分为相对时间和绝对时间,两者计算方法不同。现以__timespecTimeoutTick为例,分析其具体计算流程如下图所示。
由上图可以看出,当计算相对超时时间时,需根据入参时间计算结束时间,再根据结束时间和当前时间的差值计算超时时间;当计算绝对超时时间时,入参即为结束时间,可直接计算超时时间并返回。