为什么tv_sec和tv_usec在确定计时器的持续时间方面都很重要?

时间:2012-02-23 05:14:31

标签: c timer

手册页getitimer(2)声称

  

tv_sec和tv_usec在确定时都很重要   计时器的持续时间

它没有继续说明为什么会这样。在我遇到的很多例子中,tv_sec只是设置为0,而tv_usec给出了一些合理的值,反之亦然。这些计时器是否同时倒计时,还是总倒计时时间为tv_sec + tv_usec?我应该同时使用吗?既不?

5 个答案:

答案 0 :(得分:21)

man page记录了timeval结构:

struct timeval {
    long tv_sec;                /* seconds */
    long tv_usec;               /* microseconds */
};

如果您想等待几秒钟,则只需设置tv_sec即可。如果您想等待一段时间,则需要设置tv_usec。如果您想等待4.5秒,则将两者设置为适当的值(分别为4和500000)

答案 1 :(得分:3)

虽然描述了结构:

struct timeval {
    long tv_sec;                /* seconds */
    long tv_usec;               /* microseconds */
};

如您所见,总时间为tv_sec + (1.0/1000000) * tv_usec秒。这就是为什么当你需要时间不到一秒时你设置tv_usec,当你需要超过1秒的时间你设置两者(但通常最终只设置tv_sec

答案 2 :(得分:1)

是的,总时间是两者的总和。 tv_sec是秒。并且tv_usec超过了微秒。

答案 3 :(得分:0)

  

long int tv_usec这是剩余的经过时间(一小部分   第二个),表示为微秒数。它总是少   超过一百万。

tv_sec将处理整秒,而tv_usec将处理微秒。

微秒将在达到最大值(1百万)时重置为0,并像正常秒表一样递增秒数。

答案 4 :(得分:-2)

因为我没有设置tv_usec而导致内存泄漏。 Comuter获取这两个值的总和,如果不初始化其中一个值,则总和值可以是随机的。