2011-09-13 14 views
3

私はHIDデバイスでデータを取得しています。以下のコードは私のタイミングメカニズムの概略です。ManualResetEvent.WaitOne(1)は1ms以上待ちますか?

Dim CANTimer as New System.Diagnostics.Stopwatch 
Dim resetEvent as New Threading.ManualResetEvent(False) 
.... 

CANTimer.Start() 
ResetEvent.WaitOne(1) 
CANTimer.Stop() 

タイミングこれ、私は通常、私はHID転送が...取るようにし、約4回ごとまたは5番目の反復は20msのを取る期待遅延である、3msのの時間を取得します。これらの数値は、ミリ秒単位でタイムアウトを設定したものに関係なく、実際には変化しません。

なぜResetEventは1ミリ秒でタイムアウトしないのですか?

と..金属にもっと近く、なぜHID転送が3msまたは20ms(決して15msなど)かかると思われるのですか?転送に20msかかるとどうなりますか?

+0

興味深い。私は自分のHID転送データを見ていました。応答時間は3ms〜20msではありません... 3msまたは20msです。タイムアウトを4msと設定すると、20ms要求がスピードアップするのではないか... HIDデバイスに新しい送信パケットを送信して応答させることができれば興味がありました(そして、20msの代わりに6msの送受信を行います) – drinck

+0

By私は答えとしてそれを取るだろう。 – drinck

答えて

4

Windowsでのタイマーの解像度は、デフォルトで15.625ミリ秒です。 timeBeginPeriod(1)をピンポークすることで、ミリ秒までクランクすることができますが、これはシステム全体に影響します。ミリ秒数をカウントする方法ではなく、タイムアウトを真のタイムアウトのように扱います。

+1

'timeBeginPeriod'は本当に必要な場合にのみ使用するべきであることを強調したいと思います。 – CodesInChaos

+0

だから。私がそれを理解する方法は、timeBeginPeriod(1)は他のプログラムの動作方法を変える可能性がありますか?私たちはデータ転送速度を上げたいと思っていますが、組み込みシステム上でより多くのデータを収集し、大きなパケットを多数の小さなパケットを受け取るように高速化するのではなく、大きなパケットをウィンドウに転送することに重点を置くべきでしょう。 – drinck

関連する問題