Thread abschießen möglich - wie?

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
DelUser01

Thread abschießen möglich - wie?

Beitrag von DelUser01 »

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?
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Thread abschießen möglich - wie?

Beitrag von AUGE_OHR »

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")
gruss by OHR
Jimmy
DelUser01

Re: Thread abschießen möglich - wie?

Beitrag von DelUser01 »

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.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Thread abschießen möglich - wie?

Beitrag von AUGE_OHR »

es geht doch wohl (nur) um die Schleife in einem Thread wo du nicht raus kommst ?

Code: Alles auswählen

DO WHILE .NOT. lExit
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.
gruss by OHR
Jimmy
DelUser01

Re: Thread abschießen möglich - wie?

Beitrag von DelUser01 »

Eine Schleife ist natürlich schon beteiligt - das wäre ja einfach.
Hier hängt das Zeugs:

Code: Alles auswählen

nRet := DllCall( GsCtiDll() , ;
DLL_CDECL + DLL_CALLMODE_COPY , ;
"mtapiGetMessage" , ;
GsCtiHandleVar() ,;
@cMsg , ;
dnCTIgetmsglen )
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.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Thread abschießen möglich - wie?

Beitrag von AUGE_OHR »

hi,

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
DelUser01

Re: Thread abschießen möglich - wie?

Beitrag von DelUser01 »

Danke Jimmy - schaue ich mir an.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Thread abschießen möglich - wie?

Beitrag von AUGE_OHR »

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.
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Thread abschießen möglich - wie?

Beitrag von Werner_Bayern »

AUGE_OHR hat geschrieben: Sa, 08. Jul 2017 21:25 grob gesagt geht es darum das zum DLL Aufruf ein "Callback" Slot gehört wo man die Windows Events abfangen kann.
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!>
Antworten