手册页getitimer(2)声称,为什么tv_sec和tv_usec在确定定时器的持续时间方面有重要意义?
都tv_sec和确定定时器
的 时间tv_usec显著它不会去说这是为什么。在我遇到tv_sec的许多例子中,我们将其设置为0,而tv_usec则给出了一些合理的值,反之亦然。这些定时器是同时倒计时,还是总倒计时间tv_sec + tv_usec?我应该同时使用吗?都不是?
手册页getitimer(2)声称,为什么tv_sec和tv_usec在确定定时器的持续时间方面有重要意义?
都tv_sec和确定定时器
的 时间tv_usec显著它不会去说这是为什么。在我遇到tv_sec的许多例子中,我们将其设置为0,而tv_usec则给出了一些合理的值,反之亦然。这些定时器是同时倒计时,还是总倒计时间tv_sec + tv_usec?我应该同时使用吗?都不是?
的man page记录了timeval
结构:
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
如果你想等待几秒钟,你只需设置tv_sec
。如果你想等一秒钟,你会设置tv_usec
。如果你想等待4.5秒,你会设置这两个到适当的值(分别为4和500000)
另外,是usec不允许超过1秒? – Ziggy 2012-02-23 05:30:57
POSIX似乎没有为所有角落情况指定任何行为(tv_usec <0,tv_nsec <0,tv_usec> 1000000,tv_nsec> 1000000000),所以最好不要发生这种情况。 – 2012-02-23 05:38:13
是的,总时间是两者的总和。 tv_sec是秒。而tv_usec超出了那个微秒。
所以例如,如果我给他们的值分别为1和250000,这将是1.25秒? – Ziggy 2012-02-23 05:19:11
是的。这将是1.25 – 2012-02-23 05:20:04
的结构虽然描述:
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
正如你看到的,总的时间为tv_sec + (1.0/1000000) * tv_usec
秒。这就是为什么当你需要设置tv_usec
第二下时,当你需要的时间超过1秒同时设置了(但通常最终只tv_sec
设置)
我编辑的答案已经包括1/100万而不是 – 2012-02-23 05:22:25
我有内存泄漏,因为我没有设置tv_usec。 Comuter获得这两个值的总和,如果你没有初始化其中的一个值,那么总和值可能是随机的。
long int tv_usec这是剩余时间( 秒的一小部分),表示为微秒数。它总是比一百万更少的 。
tv_sec将处理整秒,而tv_usec处理微秒。
微秒将达到其最大值(100万)时重置为0,并像秒表一样增加秒数。
我不相信该手册页包括“为什么......” – 2012-02-23 05:17:47
你是一个聪明的家伙! – Ziggy 2012-02-23 05:19:27