首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解gettimeofday系统调用

理解gettimeofday系统调用
EN

Stack Overflow用户
提问于 2014-02-24 13:17:10
回答 1查看 4.1K关注 0票数 3

我需要使用gettimeofday来使用这个函数来测量微秒分辨率的时间差。

我知道这不是最好的功能,但我想知道为什么。在这篇文章中,question,AndrewStone说会有一个问题,,,,a,,,,a,a,,a,,,,,a,a,,,。,我不明白为什么会有问题,如果我们只是从时代数到微秒的话。

如果我误解了这个人,时间是秒+微秒的值,我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-24 13:29:39

gettimeofday采用两个参数:

代码语言:javascript
复制
int gettimeofday(struct timeval *tv, struct timezone *tz);

根据手册页:

timezone结构的使用已经过时;通常应该将tz参数指定为NULL。

如果您这样做,它将只返回秒和微秒以来的时代,即不涉及时区。不管是谁以不同的方式告诉你在这方面都是错误的。

不过,你还是要小心一点。虽然你不会看到这个前进或延迟一个小时,我相信你会发现它前进和延迟,因为墙壁时间是调整的东西,如ntp。因此,两个调用之间经过的微秒数可能不是两个结果之间的差异(例如,如果ntp正在推进或延迟时钟)。

更好的方法是将clock_gettime()CLOCK_REALTIMECLOCK_MONOTONIC结合使用,具体取决于您要测量的内容(经过的时间或时钟中的更改)。

编辑:您需要一个例程来减去两个timeval结构。这里有一个:

代码语言:javascript
复制
int
timeval_subtract (struct timeval *result, struct timeval *x,
                  struct timeval *y)
{
  if (x->tv_usec < y->tv_usec)
    {
      int nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1;
      y->tv_usec -= 1000000 * nsec;
      y->tv_sec += nsec;
    }

  if (x->tv_usec - y->tv_usec > 1000000)
    {
      int nsec = (x->tv_usec - y->tv_usec) / 1000000;
      y->tv_usec += 1000000 * nsec;
      y->tv_sec -= nsec;
    }

  result->tv_sec = x->tv_sec - y->tv_sec;
  result->tv_usec = x->tv_usec - y->tv_usec;

  return x->tv_sec < y->tv_sec;
}

与这里的类似:node/Elapsed-Time.html

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21988939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档