gpt4 book ai didi

linux - Linux 上的 setitimer 汇总?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:34 26 4
gpt4 key购买 nike

当我使用 setitimer 设置一个短超时,然后在 Linux 2.6 上查询设置值(使用 getitimer 或另一个 setitimer)。 26系统(Debian 5.0.5),我得到一个比我设置的更高的值:

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

int main() {
struct itimerval wanted, got;

wanted.it_value.tv_sec = 0;
wanted.it_value.tv_usec = 7000;
wanted.it_interval.tv_sec = 0;
wanted.it_interval.tv_usec = 0;

setitimer(ITIMER_VIRTUAL, &wanted, NULL);
getitimer(ITIMER_VIRTUAL, &got);

std::cerr << "we said: " << wanted.it_value.tv_usec << "\n"
<< "linux set: " << got.it_value.tv_usec << std::endl;

return 0;
}

返回:

we said: 7000
linux set: 12000

这是有问题的,因为我们使用的是经过一些计算后报告的剩余时间,而且它们也太大了。

这是一个已知问题吗? (谷歌搜索无效。)有人有好的解决方法吗?

最佳答案

POSIX documentation of the setitimer function有一张纸条

Implementations may place limitations on the granularity of timer values. For each interval timer, if the requested timer value requires a finer granularity than the implementation supports, the actual timer value shall be rounded up to the next supported value

您系统中的粒度似乎高于 1000 usec(似乎是 6000 usec)并且计时器值被四舍五入。如果您需要这样的精度,计时器粒度就是个问题。

关于linux - Linux 上的 setitimer 汇总?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6856514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com