[TOC]

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为例,分析其具体计算流程如下图所示。

由上图可以看出,当计算相对超时时间时,需根据入参时间计算结束时间,再根据结束时间和当前时间的差值计算超时时间;当计算绝对超时时间时,入参即为结束时间,可直接计算超时时间并返回。