Thread abschießen möglich - wie?
Moderator: Moderatoren
Thread abschießen möglich - wie?
Habe da ein dummes Problem...
Es läuft ein Thread welcher über eine Fremd-DLL mit DllCall() auf Daten wartet. Beim Aufruf kann ich kein Timeout o.ä angeben. Wenn das Dateineinlesen beendet ist wartet die Funktion bis zum nächsten Event. Wenn jetzt aber nichts mehr kommt, dann bleibt die mit DllCall aufgerufene Funktion und damit der Thread quasi hängen.
Mit QUIT kann er von Xbase++ schon beendet werde - ich möchte das aber ohne QUIT machen.
Vermutlich sehe ich den Wald vor lauter Bäumen nicht - aber es geht mit wie dem Thread - ich hänge fest.
Kann man das lösen?
Es läuft ein Thread welcher über eine Fremd-DLL mit DllCall() auf Daten wartet. Beim Aufruf kann ich kein Timeout o.ä angeben. Wenn das Dateineinlesen beendet ist wartet die Funktion bis zum nächsten Event. Wenn jetzt aber nichts mehr kommt, dann bleibt die mit DllCall aufgerufene Funktion und damit der Thread quasi hängen.
Mit QUIT kann er von Xbase++ schon beendet werde - ich möchte das aber ohne QUIT machen.
Vermutlich sehe ich den Wald vor lauter Bäumen nicht - aber es geht mit wie dem Thread - ich hänge fest.
Kann man das lösen?
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Thread abschießen möglich - wie?
hi,
wie rufst du den Thread auf ?
was macht der DLL Aufruf ?
wieso "wartest" du in einem Thread ?
gewöhnlich wird ein Thread mit o:setInterval(NIL) beendet (aber nicht wenn er in einer Schleife "wartet")
wie rufst du den Thread auf ?
was macht der DLL Aufruf ?
wieso "wartest" du in einem Thread ?
gewöhnlich wird ein Thread mit o:setInterval(NIL) beendet (aber nicht wenn er in einer Schleife "wartet")
gruss by OHR
Jimmy
Jimmy
Re: Thread abschießen möglich - wie?
Der Thread hört permanent einen TAPI-Kanal ab.
Verschiedene Ursachen können aber verantwortlich dafür sein, dass auf dem Kanal nichts mehr kommt.
Die aufgrufene Funktion wartet auf den nächsten Event - und es kommt eben keiner mehr...
Es ist keine Standard MS-TAPI.
Ergänzung:
Vermutlich ist das so wie wenn ich Sleep() verwende - da geht ja auch (fast) nichts mehr.
Verschiedene Ursachen können aber verantwortlich dafür sein, dass auf dem Kanal nichts mehr kommt.
Die aufgrufene Funktion wartet auf den nächsten Event - und es kommt eben keiner mehr...
Es ist keine Standard MS-TAPI.
Ergänzung:
Vermutlich ist das so wie wenn ich Sleep() verwende - da geht ja auch (fast) nichts mehr.
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Thread abschießen möglich - wie?
es geht doch wohl (nur) um die Schleife in einem Thread wo du nicht raus kommst ?
jetzt muss man nur lExit an den Thread bei Aufruf übergeben um es später in "Main" zu ändern.
---
ich weiss ja nicht auf was du "wartest" aber wenn du auf einen (Notify) Event "wartest" solltest du es native versuchen da du in die Windows Event Loop eingreifst.
Code: Alles auswählen
DO WHILE .NOT. lExit
---
ich weiss ja nicht auf was du "wartest" aber wenn du auf einen (Notify) Event "wartest" solltest du es native versuchen da du in die Windows Event Loop eingreifst.
gruss by OHR
Jimmy
Jimmy
Re: Thread abschießen möglich - wie?
Eine Schleife ist natürlich schon beteiligt - das wäre ja einfach.
Hier hängt das Zeugs:
Wenn alles normal abläuft meldet sich DllCall() immer wieder zurück.
In verschiedenen Fehlersituationen gehen mir im Moment die letzten 1-2 übertragenen Zeilen verloren. Wenn ich die auch noch haben will riskiere ich den Hänger.
Hier hängt das Zeugs:
Code: Alles auswählen
nRet := DllCall( GsCtiDll() , ;
DLL_CDECL + DLL_CALLMODE_COPY , ;
"mtapiGetMessage" , ;
GsCtiHandleVar() ,;
@cMsg , ;
dnCTIgetmsglen )
In verschiedenen Fehlersituationen gehen mir im Moment die letzten 1-2 übertragenen Zeilen verloren. Wenn ich die auch noch haben will riskiere ich den Hänger.
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Thread abschießen möglich - wie?
hi,
nun wird mir langsam klar was dein Problem ist : es läuft alles im Xbase++ Thread
in ot4xb gibt es :
nun wird mir langsam klar was dein Problem ist : es läuft alles im Xbase++ Thread
in ot4xb gibt es :
Code: Alles auswählen
DELEGATED_EVAL(bBlock, ... params ... ) - Eval a codeblock at the GUI thread
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Thread abschießen möglich - wie?
vermutlich handelt es sich um das selbe Problem mit TAPI wie in diesem Thread
viewtopic.php?f=27&t=164
grob gesagt geht es darum das zum DLL Aufruf ein "Callback" Slot gehört wo man die Windows Events abfangen kann.
viewtopic.php?f=27&t=164
grob gesagt geht es darum das zum DLL Aufruf ein "Callback" Slot gehört wo man die Windows Events abfangen kann.
gruss by OHR
Jimmy
Jimmy
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2121
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 72 Mal
Re: Thread abschießen möglich - wie?
Was jetzt wunderbar mit dem neuen EXTERN Befehl funktioniert!
Siehe 2. Beispiel in der Hilfe (Ermittlung aller sichtbaren Fenster-Titel des Desktops).
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>