如何找到setitimer()的分辨率?

时间:2011-10-04 09:52:51

标签: c++ linux timer high-resolution

我需要一个高分辨率计时器(至少具有微秒级别分辨率),我发现setitimer()可以设置为微秒级别。

struct itimerval t;
t.it_interval.tv_sec = 0;
t.it_interval.tv_usec = 2;
t.it_value.tv_sec = 0;
t.it_value.tv_usec = 3;
setitimer (ITIMER_REAL , &t, NULL);

我需要知道的是setitimer() linux中的实际解决方案吗?

2 个答案:

答案 0 :(得分:1)

实际上降低,但未指定多低。联机帮助页指出:

  

可能会在某个(短)时间后到期,这取决于系统计时器分辨率和系统负载;看时间(7)。

如果您需要微秒级别的分辨率和精度,那么您就处于实时域中。

答案 1 :(得分:1)

API处于微秒级,实际分辨率取决于内核配置和硬件资源。

如果你的内核配置没有设置Hi res timers选项,那么分辨率就是OS滴答分辨率 - 它本身在内核配置(CONFIG_HZ)中设置,通常在100到1000赫兹之间。

如果打开hi res计时器选项,则计时器分辨率由您的特定计时器硬件能力和限制决定。

您可以使用以下命令找到系统上的实际定时器源:

$ ls / sys / devices / system / clocksource / clocksource0 /

$ cat / sys / devices / system / clocksource / clocksource0 / *