2011-09-13 68 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() 

時機這個問題,我通常會得到3ms的時間,這是我所期待的HID轉移採取延遲...和大約每4或第5次迭代,都需要20毫秒。無論我設置的超時時間是多少,這些數字都不會改變。

爲什麼ResetEvent不會在一個ms超時?

和..更接近金屬,爲什麼HID轉移似乎需要3ms或20ms(從未15ms等)......轉移需要20ms時發生了什麼?

+0

有趣。我正在查看我的HID傳輸數據,響應時間不是3ms到20ms,而是3ms或20ms。我很好奇,如果將超時設置爲4ms將加速20ms請求......如果我可以強制它響應(並且獲得6ms發送/接收而不是20ms),則發送新的傳輸數據包到HID設備 – drinck

+0

由方式漢斯......我會以此爲答案。 – drinck

回答

4

Windows上的計時器分辨率默認只有15.625毫秒。您可以通過調整timeBeginPeriod(1)來將其調整到毫秒級,但這具有全系統影響。不要像真正的超時那樣處理暫停,而不是數毫秒的方法。

+1

只是想強調一下'timeBeginPeriod'應該只在你真的需要的時候使用。 – CodesInChaos

+0

所以。我理解它的方式,禁止timeBeginPeriod(1)可能會改變其他程序的運行方式嗎?我們很樂意加快數據傳輸速度,但我們應該專注於在嵌入式系統上獲取更多數據,並將這些較大的數據包傳輸到Windows,而不是加速窗口以接收大量小數據包。 – drinck