2011-09-13 2 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 전송이 걸릴 기대 지연 ... 그리고이 20ms를 취할 것입니다 거의 모든 4 번째 또는 5 번째 반복 인, 3MS의 시간을 얻을 수 있습니다. 이 숫자는 밀리 초 단위로 타임 아웃을 설정 한 것과 관계없이 실제로 변경되지는 않습니다.

ResetEvent가 1ms에서 시간 초과되지 않는 이유는 무엇입니까?

및 .. 금속에 더 가까이 있으면 HID 전송이 3ms 또는 20ms (절대 15ms 등)가 걸리는 이유는 무엇입니까? 전송에 20ms가 걸리면 어떻게됩니까?

+0

흥미 롭습니다. 내 HID 전송 데이터를보고 있었고 응답 시간은 3ms ~ 20ms가 아니며 3ms 또는 20ms입니다. 나는 4ms가 20ms 요청을 가속화한다고 말하는 타임 아웃을 설정하면 ... HID 장치에 새로운 전송 패킷을 보내서 응답 할 수 있다면 (그리고 20ms 대신 6ms 송수신을받을 수있다) – drinck

+0

By 한스 한 ... 나는 그걸 대답으로 받아 들일거야. – drinck

답변

4

Windows의 타이머 해상도는 기본적으로 15.625 msec입니다. timeBeginPeriod (1)을 pinvoking하여 밀리 초까지 크랭크 할 수 있지만 시스템 전체에 영향을 미칩니다. 밀리 세컨드를 세는 방법이 아닌, 실제 타임 아웃과 같은 타임 아웃을 처리하십시오.

+1

'timeBeginPeriod'는 정말로 필요할 경우에만 사용해야한다는 것을 강조하고 싶습니다. – CodesInChaos

+0

그럼. 내가 그것을 이해하는 방식으로 timeBeginPeriod (1)은 다른 프로그램의 작동 방식을 바꿀 수 있습니까? 우리는 데이터 전송 속도를 높이고 싶지만 임베디드 시스템에서 더 많은 데이터를 수집하고 작은 패킷을 많이 받기 위해 창을 빠르게하기보다는 큰 패킷을 창으로 전송하는 데 집중해야합니다. – drinck

관련 문제