当前位置:嗨网首页>书籍在线阅读

09-时间源精度

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

11.3 时间源精度

POSIX定义了clock_getres()函数,可以获取给定时间源的精度。

513.png 成功调用clock_getres()时,会将clock_id指定的时钟精度保存到res中。如果结果不是NULL,就返回0。失败时,函数返回-1,并设置errno为以下两个错误码之一:

EFAULT

res是一个非法的指针。

EINVAL

clock_id不是该系统上合法的时间源。

以下示例代码将输出先前讨论的五种时间源精度:

514.png 在现代x86系统上,输出大致类似于下面这样:

515.png 注意,4 000 250纳秒是4毫秒,也就是0.004秒。反过来,0.004秒也是给定Hz值为250的x86系统时钟的精度(这正是我们在本章第一节所讨论的)。这样,我们看到CLOCK_REALTIME和CLOCK_MONOTONIC二者都和jiffy数以及系统计时器所提供的精度有关。相反,CLOCK_PROCESS_CPUTIMEID和CLOCK THREAD_CPUTIME_ID则使用了一种更高精度的时间源——在同一台x86机器上,即TSC,提供了纳秒级精度。

在Linux上(还有大多数其他UNIX系统),所有使用POSIX时钟的函数都需要将目标文件与librt链接。举个例子,如果把刚才的代码片断编译成完全可执行程序,可能会用到以下命令:

516.png