この質問は、Windows (XP 以上) で何かを正確にタイミングすることに関するものではなく、callback または interrupt を介して非常に迅速に何かを行うことに関するものです。
1ミリ秒ごと、できれば100マイクロ秒ごとに何かを定期的に行う必要があります。私がする必要があるのは、この速度でいくつかの非同期ハードウェア (イーサネット) を駆動して、パケットの安定したストリームをネットワークに出力し、そのストリームが可能な限り定期的かつ同期的に見えるようにすることです。しかし、質問が(イーサネット)デバイスから分離できる場合は、一般的な答えを知っておくとよいでしょう。
「Windows を使用することさえ考えないでください!!!!」と言う前に、少し背景を説明します。すべてのリアルタイム システムに同じ要求があるわけではありません。平均して 10 ~ 16 ミリ秒ごとにオーディオまたは画像のブロックを処理する必要があるにもかかわらず、ほとんどの場合、曲とビデオは Windows で問題なく再生されます。適切なバッファリングを使用すると、Windows の遅延が変動する可能性がありますが、ハードウェアは遅延の影響をほとんど受けず、イベントの安定した同期ストリームを維持できます。それでも、私たちのほとんどは時折の不具合を許容します。私のアプリケーションはそのようなものです - おそらくかなり寛容です。
私にとって高価なオプションは、アプリケーション全体を Linux に移植することです。しかし、Linux は同じハードウェア上で動作する別のソフトウェアであるため、より優れたソフトウェアを作成し、Windows に固執することを強く好みます。競合するすべてのハードウェアとソフトウェアを排除できるという贅沢があります (インターネットやその他のネットワーク アクセスがない、他のアプリケーションが実行されていないなど)。Windows にこれを実行させる見込みはありますか? どのような制限がありますか?
ターゲット ハードウェアには高性能イベント タイマーがあり、このタイマーは割り込みをプログラムできることはわかっていますが、そのためのドライバーはありません。書いてもいいですか?そこに役立つ例はありますか?まだ見つかっていません。これは QueryPerformanceCounter に干渉しますか? イーサネット デバイスを使用するということは、select() を慎重に使用すればすべてが簡単になるということですか?
有用な記事へのポインタを歓迎します - 正確な時間を取得する方法についての概要を多数見つけましたが、忙しい待機に相当するものを使用する以外に、このようなことを行う方法についてはまだありません. 忙しい待ち時間を避ける方法はありますか?カーネル モードまたはデバイス ドライバー オプションはありますか?