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

C++ 如何找到setitimer()的分辨率?,c++,linux,timer,high-resolution,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中的实际分辨率?实际上更低,但没有指

我需要一个高分辨率计时器(至少有微秒级的分辨率),我发现
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中的实际分辨率?

实际上更低,但没有指定有多低。主页说明:

之后可能会过期一段(短)时间,这取决于系统计时器分辨率和系统负载;见《时代》(第7章)


如果您需要微秒级的分辨率和精度,那么您是在实时域中。

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

如果您的内核配置没有设置Hi res timers选项,那么分辨率就是OS tick分辨率——它本身在内核配置(config_HZ)中设置,通常在100到1000 HZ之间

如果hi res timer(高分辨率定时器)选项处于启用状态,则定时器分辨率由您特定的定时器硬件能力和限制决定

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

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


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

检查手册:
man 2设置定时器
man 7时间
您知道如何实时实现此功能吗domain@DarRay:抱歉,这个主题太宽,无法发表帖子或评论。最好买一本好书,开始阅读。实时与精度无关,而是在给定的时间范围内完成最后期限。@RedX:是的,我同意。但是,如果不能在微秒内完成最后期限,为什么需要高计时器精度呢?如果OP可能遭受几微秒的延迟,他就不需要setitimer中的精度。@jby:对于第一个命令,结果是
可用\u clocksource current\u clocksource
,第二个命令显示
acpi\u pm jiffies tsc acpi\u pm
。我不知道这些是什么意思。基本上,这意味着acpi_pm(acpi电源管理定时器)是您机器中的活动时钟源。ACPI PM计时器的分辨率约为280纳秒,因此从这个角度来看,您还可以。但是请注意,需要考虑中断和调度延迟。您可能需要安装一个PREEMPT-RT内核才能获得所需的解决方案。这里有很多关于此主题的相关资料: