我需要一個在Linux下具有1ms分辨率的計時器刻度。它用于遞增計時器值,該計時器值又用于查看是否應觸發各種事件。由于glibc的要求,POSIX
timerfd_create不是一個選項。我嘗試使用timer_create和timer_settimer,但從它們獲得的最好結果是10ms分辨率,較小的值似乎默認為10ms分辨率。根據手冊頁,Getittimer和setitimer的分辨率為10毫秒。
我目前能想到的唯一執行此計時器的方法是在主循環中將clock_gettime與CLOCK_MONOTONIC一起使用,以測試是否已通過ms,并增加計數器(然后檢查是否應觸發各種事件)。
有比在主循環中不斷查詢更好的方法嗎?建議的解決方案是什么?
我使用的語言是普通的舊c
更新
我正在使用2.6.26內核。我知道您可以使其在1kHz時中斷,然后可以將POSIX timer_
*函數編程為最高1ms,但這似乎并不可靠,我也不想使用它,因為在某些情況下它可能需要新的內核系統。一些備用內核似乎仍配置了100Hz。我將需要檢測到這一點。該應用程序可能在我的系統以外的其他設備上運行:)
我無法入睡1ms,因為可能有網絡事件需要我做出反應。
我的解決方法
由于并不是那么重要,我只聲明全局計時器具有100ms的分辨率。使用自己的計時器的所有事件都必須設置至少100毫秒的計時器到期時間。我或多或少在想是否會有更好的方法,因此是一個問題。
為什么我接受答案 我認為自由空間的答案最能說明為什么沒有實時Linux系統是不可能實現的。