PRIntervalTime

一种平台相关的类型,表示单调递增的整数——NSPR 运行时时钟。

语法

#include <prinrval.h>

typedef PRUint32 PRIntervalTime;

#define PR_INTERVAL_MIN 1000UL
#define PR_INTERVAL_MAX 100000UL

#define PR_INTERVAL_NO_WAIT 0UL
#define PR_INTERVAL_NO_TIMEOUT 0xffffffffUL

描述

PRIntervalTime 的单位是平台相关的。它们的选择是为了适合主机操作系统,同时提供足够的精度和周期,以便客户端使用。

PRIntervalTime 表示的递增间隔值会环绕。因此,它永远不应该用于超过大约 6 小时的间隔。间隔时间不受主机处理需求的影响,并且获取成本非常低。

常量 PR_INTERVAL_MINPR_INTERVAL_MAX 定义了每秒刻度的范围。这些常量限制了 PRIntervalTime 对象的周期和分辨率。

保留的常量 PR_INTERVAL_NO_WAITPR_INTERVAL_NO_TIMEOUT 对 NSPR 具有特殊含义。它们分别表示进程不应该等待任何时间(立即返回)或永远等待(永远不会超时)。

重要说明

用于间隔时间的计数器允许溢出。由于用于定义任意纪元的计数器的采样可以具有任何 32 位值,因此在使用间隔时间时必须小心。测试间隔过期正确的编码风格如下所示

if ((PRIntervalTime)(now - epoch) > interval)
<... interval has expired ...>

只要间隔和经过时间(now - epoch)不超过 PRIntervalTime 允许的命名空间的一半 (231-1),即使 now 和 epoch 的符号不同,上面显示的表达式也会提供预期的结果。

PRIntervalTime 对象的分辨率由 API 定义。NSPR 保证每秒至少有 1000 个刻度,但不超过 100000 个。在 10000 个刻度/秒的最大分辨率下,每个刻度代表 1/100000 秒。以该速率,32 位寄存器将在大约 28 小时内溢出,使最大有效间隔大约为 6 小时。因此,必须基于日历时间来等待超过半天后的事件。