我需要一个在 linux 下分辨率为 1ms 的计时器。它用于增加一个计时器值,该值又用于查看是否应该触发各种事件。由于 glibc 的要求,POSIX timerfd_create 不是一个选项。我尝试了 timer_create 和 timer_settimer,但我从中得到的最好的结果是 10 毫秒的分辨率,较小的值似乎默认为 10 毫秒的分辨率。根据手册页,Getittimer 和 setitimer 的分辨率为 10 毫秒。
我目前能想到的执行此计时器的唯一方法是在我的主循环中使用 clock_gettime 和 CLOCK_MONOTONIC 来测试是否经过了毫秒,如果是则增加计数器(然后检查各种事件是否应该触发)。
有没有比在主循环中不断查询更好的方法呢?推荐的解决方案是什么?
我使用的语言是普通的 c
更新
我使用的是 2.6.26 内核。我知道你可以让它以 1kHz 的频率中断,然后可以将 POSIX timer_* 函数编程为最高 1ms,但这似乎不可靠,我不想使用它,因为它可能需要一些新内核系统。一些股票内核似乎仍然配置了 100Hz。我需要检测到这一点。该应用程序可能在我的系统之外的其他东西上运行:)
我无法入睡 1 毫秒,因为我可能需要对网络事件做出反应。
我是如何解决 的 因为它不是那么重要,所以我简单地声明全局计时器的分辨率为 100 毫秒。所有使用自己的计时器的事件都必须设置至少 100 毫秒的计时器到期时间。我或多或少想知道是否会有更好的方法,因此提出了这个问题。
为什么我接受这个答案 我认为来自 freespace 的答案最好地描述了为什么没有实时 Linux 系统是不可能的。