Registriert seit: 5. Feb 2007
174 Beiträge
FreePascal / Lazarus
|
USB / HID in einem Thread - TJvHidDeviceController.OnDeviceData kommt nicht an
1. Sep 2011, 01:02
Schönen guten Abend!
In einem mittlerweile sehr komplexen und umfangreichen Projekt (D7/WinXP) hab ich einen Thread, der unter anderem für die Abwicklung einer Kommunikation mit einem Gerät über HID zuständig ist.
Dafür wird in dem Thread eine Instanz von TJvHidDeviceController (von Robert Marquardt) angelegt. Der Thread kümmert sich auch um die gesamte Ereignisbehandlung.
Das funktioniert so weit auch sehr gut - wenn denn die entsprechenden Ereignisse auch ausgelöst werden.
Das Problem ist, daß bei sehr hoher Last im Main-Thread das Ereignis "OnDeviceData" des HIDDeviceController nicht mehr ausgelöst wird, bzw. extrem verzögert ausgelöst wird. Das führt aber im USB-Gerät zu einem Überlauf des Sendepuffers und damit zu einem Verlust von Daten.
Mein Verdacht ist folgender:
TJvHidDeviceController verwendet zum Auslesen der Daten einen eigenen Thread, den TJvHidDeviceReadThread. In seinem Execute verwendet der ein Synchronize. Das aber wartet auf den Main-Thread und könnte daher Ursache der nicht mehr auftretenden OnDeviceData-Events sein.
Weiß jemand, warum hier ein Synchronize verwendet wird? Nur damit in der Ereignisbehandlung kein "Blödsinn" passieren kann?
Für jeden Tip dankbar,
Luggi
|