Read-Funktion unterbrechen

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
zbr147
Posts: 27
Joined: Thu Feb 24, 2005 10:15 am
Location: Stuttgart

Read-Funktion unterbrechen

Post by zbr147 »

Hallo,


habe folgendes Problem:


hab im Vordergrund meine GUI und im Hintergrund eine Schleife
welche mein Port 0.0 abfrägt( nach dem IR-Code.)

diese Schleife läuft in einem eigenen Thread.

wenn ich nun den Thread beenden wil (Programmabbruch usw.)
blockiert die Read-Methode solange bis ich eine Taste auf meiner FB drücke.

Jetzt ist die Frage :

wie kann ich den IOW aus der Read-Funktion ziehen ohne das ich noch mal einen Wert rein schicken muss?

hab schon alles mögliche probiert.

MFG Jörg
supachris
Posts: 124
Joined: Tue Mar 16, 2004 12:30 am
Location: Dresden

Post by supachris »

Als ich das mal so gemacht hatte, hab ich den Threat ohne Rücksicht auf Verluste einfach abgeschossen und gut war. Steht auch hier: http://www.n1k1.de/iowarrior.htm
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Das liegt daran das ReadFile fuer HID-Geraete ein blockierender Aufruf ist.
Das Problem ist hier letztlich die IOWKIT.DLL, da sie vereinfacht ist.
Die Delphi HID-Komponente arbeitet direkt mit den Win32-Aufrufen und kann daher einen Thread mit ReadFileEx und Timeout betreiben.
zbr147
Posts: 27
Joined: Thu Feb 24, 2005 10:15 am
Location: Stuttgart

Post by zbr147 »

Danke mal für eure mühe,



aber Rabarber,


ich mach das ganze mit VB :lol:

da ist das mit den Threads nicht so einfach.

Den Thread kann ich nicht direkt kicken weil er durch die IOW-Read blockiert
ist ......

aber der Gedanke von supachris
Als ich das mal so gemacht hatte, hab ich den Threat ohne Rücksicht auf Verluste einfach abgeschossen
hat mich auf folgende lösung gebracht.

Code: Select all

   Dim lpClassName As String
   Dim lpCaption As String
   Dim Handle As Long

   Const NILL = 0&
   Const WM_SYSCOMMAND = &H112
   Const SC_CLOSE = &HF060&
   ' das ist die ClassName
   lpClassName = "ThunderRT6FormDC"
   ' So lautet meine Caption der Form
   lpCaption = "IR"


   Handle = FindWindow(lpClassName$, lpCaption$)

   Handle = SendMessage(Handle, WM_SYSCOMMAND, SC_CLOSE, NILL)


einfach direkt über die WM den Prozess kicken.
Den IPClassName findet man zur Laufzeit über Spy++ heraus
Post Reply