Linux で 1 ミリ秒の分解能のタイマー刻みが必要です。これは、さまざまなイベントをトリガーする必要があるかどうかを確認するために使用されるタイマー値をインクリメントするために使用されます。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 システムなしでは実際には不可能である理由を最もよく説明していると思います。