首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux上的setitimer是否四舍五入?

linux上的setitimer是否四舍五入?
EN

Stack Overflow用户
提问于 2011-07-28 17:06:40
回答 1查看 346关注 0票数 1

当我用setitimer设置一个很短的超时,然后在Linux2.6.26系统(Debian5.0.5)上查询这个设置值(用getitimer或其他setitimer)时,我得到一个比我设置的值更高的值:

代码语言:javascript
复制
#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;
}

返回:

代码语言:javascript
复制
we said: 7000
linux set: 12000

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

这是一个已知的问题吗?(谷歌搜索不起作用。)有没有人有好的变通办法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-29 21:01:07

POSIX documentation of the setitimer function中有一条注释

实现可能会对计时器值的粒度施加限制。对于每个间隔计时器,如果请求的计时器值需要比实现支持的粒度更细的粒度,则实际计时器值应向上舍入到下一个支持的值

您系统中的粒度似乎高于1000微秒(似乎是6000微秒),并且计时器值四舍五入。如果您需要这样的精度,那么定时器粒度就是问题所在。

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

https://stackoverflow.com/questions/6856514

复制
相关文章

相似问题

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