Hallo,
ich habe da ein programm in VB .NET geschrieben das mir helfen sollte
packete zu meinem gerät zu schicken oder welche von ihm zu empfangen
es läuft einigermaßen (das schicken zumindest! das empfangen ist sehr
langsam bzw. geht gar nicht)! ich kann kontakt zu meinem gerät
aufnehmen aber wenn ich packete empfangen möchte (methode getPacket())
dann dauert es so lange dass ich mein programm doch abbrechen muß
ich habe ein breakpoint gesetzt um zu sehen wo es hängen bleibt und da
habe ich gemerkt dass es bei der methode deviceiocontrol() in
getPacket() hängt
warum denn? ich verstehe das nicht!
kann mir jemand helfen? mein gerät ist per USB angeschlossen
hier mein code:
sub main()
SendPacket(theStartSessionPacket) // schicken läuft
Do
thePacket = GetPacket() //// Empfangen schläft fehl! Ab
hier läuft mein Programm nicht mehr bzw. sehr sehr langsam denn es geht
nicht weiter///////
If thePacket.Type = 0 And thePacket.PacketId = 6 Then
Exit Do
End If
Loop
end sub
Public Function GetPacket() As GarminPacket
Dim buffer As List(Of Byte)
Dim bufferSize As Integer
Dim data As Byte()
Dim dataSize As Integer
Dim packet As GarminPacket
buffer = New List(Of Byte)
Do
data = New Byte(ASYNC_DATA_SIZE - 1) {}
///////////------------dieser Aufruf ist der grund warum
mein programm ziemlich langsam läuft bzw. gar nicht! muß ich immer
selber abbrechen-------------/////////////
DeviceIoControl(hDevice, IOCTL_ASYNC_IN, IntPtr.Zero, 0,
data, ASYNC_DATA_SIZE, dataSize, IntPtr.Zero)
bufferSize += dataSize
buffer.AddRange(New List(Of Byte)(data).GetRange(0,
dataSize))
If dataSize = ASYNC_DATA_SIZE Then Exit Do
Loop
If buffer.Count > 0 Then
packet = New GarminPacket()
packet.Deserialize(buffer)
If packet.Type = 0 And packet.PacketId = 2 Then
' DataAvailable ...
packet = Nothing
data = New Byte(MAX_BUFFER_SIZE - 1) {}
dataSize = 0
ReadFile(hDevice, data, MAX_BUFFER_SIZE, dataSize,
IntPtr.Zero)
If dataSize > 0 Then
buffer = New List(Of Byte)(data).GetRange(0,
dataSize)
packet = New GarminPacket()
packet.Deserialize(buffer)
Return packet
End If
Else
Return packet
End If
End If
End Function
> ///////////------------dieser Aufruf ist der grund warum >mein programm ziemlich langsam läuft bzw. gar nicht! muß ich immer >selber abbrechen-------------///////////// > DeviceIoControl(hDevice, IOCTL_ASYNC_IN, IntPtr.Zero, 0, >data, ASYNC_DATA_SIZE, dataSize, IntPtr.Zero) auch ohne deinen gesamten Programmcode gesehen zu haben, der Aufruf kann nur vor den Baum gehen. Schau dir nochmal die Spezifikation der Funktion an und was du als Strukturen übergibst. Ich finde es außerdem relativ mutig den Fehlercode nicht auszuwerten,sondern einfach anzunehmen das es geklappt hat.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.