手册页getitimer(2)声称
tv_sec和tv_usec在确定时都很重要 计时器的持续时间
它没有继续说明为什么会这样。在我遇到的很多例子中,tv_sec只是设置为0,而tv_usec给出了一些合理的值,反之亦然。这些计时器是否同时倒计时,还是总倒计时时间为tv_sec + tv_usec?我应该同时使用吗?既不?
答案 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获取这两个值的总和,如果不初始化其中一个值,则总和值可以是随机的。