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