【解決方法】50ms 間隔で高精度にデータを記録するにはどうすればよいですか?


こんにちは皆さん、

デバイスからデータを読み取り、配列を返す関数があります。

この関数を特定の時間、たとえば 10 秒間、50 ミリ秒の正確な間隔で実行したいと考えています。

ただし、C# でタイマーを使用しているときに、データ損失の問題に直面しています。

50ms という短い間隔でデータを正確に記録するために使用できる C# の方法はありますか?

私が試したこと:

System.Timers AND System.Threading.Timer も使用してみましたが、同じ問題に直面しています。

解決策 1

正確さをタイマーにまったく依存することはできません。Windows はリアルタイム オペレーティング システムではなく、タイマーは指定された間隔またはその後のある時点で動作することが保証されているだけです。 間隔が経過した直後に発生するとは限りません。 システムに空きコアがあり、タイマーが実行されているスレッドがアイドル状態である場合、可能な限り間隔に近い状態で発生しますが、それは神のラップの中にあります。

それに加えて、関数が何をする必要があるか、ログインに関係すること、およびこれら2つが毎回実行するのにかかる時間に大きく依存します:それらが遅いこと(たとえばシリアル通信など)を行う場合、50msを超える可能性がありますアイドル状態のコンピューターでもすべて自力で!

解決策 2

通常、このようなことは、PC 自体ではなく、専用のデータ収集ハードウェアを使用して行われます。 そのハードウェアは、指定されたレートでサンプルを取得し、そのデータをバッファリングして、PC がデータを取得できるときはいつでも、より大きなバンドルで PC に転送します。

コメント

タイトルとURLをコピーしました