【问题标题】:Accurate Timestamps using gettimeofday and localtime使用 gettimeofday 和 localtime 的准确时间戳
【发布时间】:2011-05-05 16:05:58
【问题描述】:

我正在尝试通过 gettimeoday 和 localtime 监控跨多个应用程序和数据路径的系统时间。在这个例子中,我想在我的代码运行之前获取系统时间(微秒精度)。我目前正在这样做:

#include <stdio.h>
#include <sys/time.h>

struct timeval tv;
struct timezone tz;
struct tm *tm;

**code I don't care about**

gettimeofday(&tv, NULL);
tm=localtime(&tv.tv_sec);

**code to watch**    

printf(" %d:%02d:%02d %ld \n", tm->tm_hour, tm->tm_min,
            tm->tm_sec, tv.tv_usec);

据我了解,本地时间调用肯定会产生一些开销,并且会降低准确性。我可能完全错了,但我应该等到我的 code to watch 完成后再调用 localtime 吗?我假设 localtime 只是对 gettimeofday 的结果进行半昂贵的转换,因此它应该放在 printf 语句之前。

【问题讨论】:

  • 你根本不需要打电话给localtime()gettimeofday() 足以监控经过的时间。
  • 我不想计时特定代码sn-p的长度,而是想以微秒为单位准确抓取系统时间。我还应该只需要 gettimeofday() 吗?
  • 是的,我根本看不到对 localtime() 的调用添加了什么。

标签: c++ c timing localtime gettimeofday


【解决方案1】:

如果您真的需要微秒级精度,可以。如果localtime 在不到一微秒的时间内执行,我会感到非常惊讶。但是,如果gettimeofday 具有微秒分辨率,我也会感到惊讶,即使实际计时器确实如此(极不可能),从系统返回时的上下文切换可能会花费超过一微秒(并且可能比致电localtime)。事实是,除非直接访问特殊硬件,否则无法达到微秒级分辨率。

【讨论】:

  • 精度和分辨率是有区别的; gettimeofday() 的分辨率为微秒,但正如您所说,执行需要很多毫秒。
  • 也许我应该使用“粒度”这个词。系统时钟的分辨率和表示的潜在分辨率之间存在差异。分辨率是指系统时钟的分辨率,(根据 Posix)未指定。 (如果gettimeofday() 的执行时间超过几百微秒,而不是毫秒,我会感到惊讶。)
猜你喜欢
  • 1970-01-01
  • 2022-01-16
  • 2012-09-01
  • 2014-12-18
  • 2020-09-09
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 2021-09-25
相关资源
最近更新 更多