Thread schließen von "außen" [ERLEDIGT]

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Thread schließen von "außen" [ERLEDIGT]

Beitrag von Manfred »

hi,
über diesen Pushbutton rufe ich aus einem Dialog ein weiteres Fenster auf, was im eigenen Thread läuft.

Code: Alles auswählen

@ 0,0 DCPUSHBUTTON;
                      ACTION {|o|o := Thread():new(), o:start({|o| oDialogZusatz:dispozeigen()})};
                     CAPTION "Tagesdienste";
                       CARGO "AN";
                      OBJECT oDialogZusatz:oPbDispoAnzeigen;
                        SIZE oDialogZusatz:nPbLaenge,oDialogZusatz:nPbHoehe
Wenn der Thread geschlossen wird, ist alles klar, aber wenn der User die reihenfolge nicht einhält und den Dialog schließt, aus dem der Thread erzeugt wurde, bleibt der Thread erhalten. So wie wir die User kennen, machen die das dann zig mal und jedesmal wird der Thread neu erstellt und bleibt irgendwo stehen.
Ich möchte aber nun den Thread irgendwie abschießen (sobald ich DCREAD GUI verlasse), wenn der Ursprungsdialog geschlossen wird, ohne das der thread selbst vorher geschlossen wurde. Wie gehe ich da vor?
die Variable O steht da nicht mehr zur Verfügung, oder ist auf jden FAll da unbekannt.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Thread schließen von "außen"

Beitrag von Tom »

Du kannst beim Erzeugen der Subthreads die Thread-ID des Originals mitgeben (Funktion ThreadID()), und im Subthread selbst prüfen, ob diese noch in der Rückgabe von ThreadInfo(THREADINFO_TID) enthalten ist. Das könntest Du in einem TIMEOUT-Codeblock tun. Der Vorteil wäre dann auch, dass sich das gleiche Fenster, insofern mehrfach offen, nur bezogen auf seinen Starter schließt.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Thread schließen von "außen"

Beitrag von Manfred »

Ermitteln der ThreadId, daran habe ich auch schon gedacht. Aber wo mache ich das? Im Action Codeblock klappte es nicht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Thread schließen von "außen"

Beitrag von Manfred »

Alles klar, ich hatte Deine Aussage falsch verstanden.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Thread schließen von "außen"

Beitrag von Tom »

Du brauchst nur die ThreadID des Aufrufers, und die bekommst Du irgendwo im Code über ThreadID(). Die geht dann z.B. als Parameter oder Owner-Eigenschaft oder sonstwie an den erzeugten Thread, und der prüft halt regelmäßig, ob die Rückgabe von ThreadInfo(1) noch diese ID enthält (Achtung, zweidimensional). Und wenn nicht, schließt er sich eben.

Möglicherweise ließe sich das auch generalisieren, aber auf Klassenebene. Wäre jedenfalls eine ziemlich elegante Lösung - und Du hättest eine eindeutige Eltern-Kind-Beziehung.
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Thread schließen von "außen"

Beitrag von Manfred »

Danke Tom,
ich bin schon dran. Habe ein paar Lösungen gefunden, für verschiedene Zwecke. Werde Deine auch versuchen und schauen, wie sie mir helfen kann.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Thread schließen von "außen" [ERLEDIGT]

Beitrag von Manfred »

Hi Tom,
Danke für den Tipp mit dem Timeout. Den habe ich umgesetzt und es sieht gut aus, das er das macht was ich brauche. Mal sehen ob und wie er sich in der Praxis bewährt.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Thread schließen von "außen" [ERLEDIGT]

Beitrag von Jan »

Manfred,

ich hatte das jetzt nicht im Detail durchgelesen. Aber in der Onlinehilfe gibt es zum Thema Thread() ein Codebeispiel, wie man einen Thread von extern abschießen kann. Hilft das eventuell weiter?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Antworten