1
我正在使用HID設備連接到連接有幾種不同類型傳感器的CAN總線。其中一些響應很快,另一些則有更多的延遲。HID設備。最好的方法來做事件處理?
我在C#中使用這個USB HID組件作爲Visual Basic中的.dll,效果很好。 http://www.codeproject.com/KB/cs/USB_HID.aspx
我目前發送和接收命令的代碼有點麻煩。有時命令和發送但沒有收到足夠快。問題可能出在傳感器上,而不是實際的VB代碼。我們希望程序繼續監視其他傳感器,而不是掛起太久。
目前我正在使用事件處理程序和循環,但我想知道這是否可以通過線程更好地完成?或者我的例程對於這種情況來說是最好的。
代碼段:
CANUSB_Class.vb
Public Sub DataReceivedHandler(ByVal sender As Object, ByVal dataReceived As DataRecievedEventArgs)
For Each byteReceived As Byte In dataReceived.data
rxDataStruct.dataPacket(rxDataStruct.InPacketLength) = byteReceived
rxDataStruct.InPacketLength += 1
Next
rxDataReady = True
MainParsingRoutine.vb
sendCommand = False
CANPort.rxDataReady = False
Try
Do
Tries += 1
If Tries > 4 Then
Exit Do
End If
CANTimer.Start()
CANPort.transmitPacket(OutCANPacket)
'Wait for Return Packet
Do Until CANPort.rxDataReady = True Or _
CANTimer.ElapsedMilliseconds > timeout
System.Threading.Thread.Sleep(0)
Loop
If CANPORT.rxDataReady = True Then
sendCommand = True
Loop Until sendCommand = True
我知道現在真的很老,但我正在研究類似的東西,我很好奇:爲什麼選擇AutoResetEvent的ManualResetEvent? –
我使用ManualResetEvent在發送和接收數據之間保持一個簡單的「狀態」。這對我們的情況有效,因爲每個發送的命令都有一個單獨的響應。如果can bus不管輸出數據,它都不是一個有效的選項。 http://stackoverflow.com/questions/153877/what-is-the-difference-between-manualresetevent-and-autoresetevent-in-net – drinck