Problem bei IowKitRead aus unterschiedlichen Threads

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
eric4711
Posts: 2
Joined: Wed Nov 02, 2011 11:14 am

Problem bei IowKitRead aus unterschiedlichen Threads

Post by eric4711 »

Hallo,

ich habe bei folgendem Workflow das Problem, dass IowKitRead fehl schlägt. GetLastError liefert 87 (Win32Error: "Falscher Parameter"). Aus anderen Projekten ist mir 87 als "Sammelfehler" bei diverser IOArbeit bekannt. Was kann der Hintergrund hier sein?

Environment: .NET4, VS2010U, IOW24 V1.0.3.0, Eigene Verschaltung, Win7 x64, Output-Image: x86 (natürlich)

Was passiert?
  • Ich habe eine Klasse, die den Zugriff auf den IOW24 kapselt. Beim ctor wird IowKitOpenDevice gerufen und Seriennummer, Productversion etc gelesen. IowKitCloseDevice wird im Dispose der Klasse aufgerufen und spielt in diesem Workflow keine Rolle.
    -> Alles funktioniert wunderbar.
  • Aufruf der Methode "StartListeningAsync":
    Hier wird ein WorkerThread erzeugt, der zunächst IowKitSetTimeout mit 500ms aufruft. Danach wird in einer Endlosschleife IowKitRead aufgerufen. Bei erfolgreichem Lesen wird ein Event erzeugt. Zusätzlich wird der Member "CancelRequest" geprüft und ggf. die Schleife und damit der Thread beendet.
    -> Alles funkioniert wunderbar. Device wird ausgelesen. Events werden erzeugt.
  • Aufruf der Methode "StopListeningAsync":
    Hier wird der Member "CancelRequest" gesetzt und gewartet, bis sich der Workerthread beendet.
    -> Alles funktioniert wunderbar. Thread wird korrekt beendet. Programm ist im Idle-Betrieb.
  • Erneuter Aufruf o.g. Methode "StartListeningAsync":
    Thread wird erzeugt, Timeout wirkt. Wenn sich jedoch der Input-Zustand am IOW ändert, wird nicht der Wert korrekt gelesen (so wie beim ersten Aufruf), sondern ein Fehler gemeldet.
    -> GetLastError liefert 87 (Falscher Parameter)?!?!
Über Tipps zu meinem Problem wäre ich sehr dankbar.
Sonnige Grüße
eric4711
eric4711
Posts: 2
Joined: Wed Nov 02, 2011 11:14 am

Re: Problem bei IowKitRead aus unterschiedlichen Threads

Post by eric4711 »

Das Problem hat sich erledigt.
Es war offensichtlich doch ein Lifetimeproblem der Wrapper-Klasse, so dass beim 2. Aufruf von StartListeningAsync über einen anderen Handle zugegriffen wurde. Was mich aber dennoch überrascht: Warum konnten die Deviceinformationen über die neue Instanz des Wrappers (neuer Handle) fehlerfrei ausgelesen werden, obwohl das Device bereits durch eine andere Instanz geöffnet war? Warum ist dieser Fehler also erst beim Read gekommen?

Aber egal. Hauptsache es geht..... :-)
eric4711
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Problem bei IowKitRead aus unterschiedlichen Threads

Post by Christoph Jung »

Wie und warum die Deviceinformationen ausgelesen wurden kann man schwer sagen. Entweder die Instanz ist nicht ganz "dicht" oder igendetwas hat das ganze zwischengepuffert.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Post Reply