Thread beenden

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

Moderator: Moderatoren

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

Thread beenden

Beitrag von Manfred »

Hi,

irgendwie habe ich Probleme damit, einen Thread zu beenden. Wenn ich nach einem Thread:start() versuche den Thread mit Thread:quit() zu beenden, erscheint eine Fehlermeldung. Operation in diesem Thread nicht erlaubt. Was da auch immer falsch laufen mag.

Stattdessen mache ich jetzt Thread := NIL. Geht das so, oder gibt das irgendwann Probleme?
Zuletzt geändert von Manfred am Fr, 03. Sep 2010 14:23, insgesamt 2-mal geändert.
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!!
J.Renseler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Do, 15. Nov 2007 11:40
Wohnort: Krefeld
Kontaktdaten:

Re: Thread beenden

Beitrag von J.Renseler »

Morgen Manfred,

du kannst einen Thread nur aus sich heraus beenden. Nicht von außerhalb. Guck dir dazu mal das Beispiel von Alaska in der Referenzhilfe zum Thread an, da steht ein Beispiel wie du einen Thread von außerhalb beenden kannst.

Gruß,
Jannik
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Thread beenden

Beitrag von Manfred »

Hallo Jannik,

alles klar. Da habe ich mal wieder gepennt.
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: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Thread beenden

Beitrag von Manfred »

So wie es aussieht, habe ich doch nicht gepennt.

Ist also doch noch nicht erledigt. Ich bekomme den Thread nicht "offiziell" mit :quit() beendet.

Code: Alles auswählen


LOCAL oRefreshThread := DbbrowseRefreshThread():new()

IF nRefresh > 0
    oRefreshThread:setInterval(nRefresh)
    oRefreshThread:start(,oBrowse)
ENDIF

.....Schleife die auf Eingabe Browseabbruch wartet.

oRefreshThread:terminate()
oRefreshThread:checkTermination()
************************************************
CLASS DbbrowseRefreshThread FROM Thread
      PROTECTED:
      VAR terminated

      EXPORTED:

      INLINE METHOD init
             ::thread:init()
             ::terminated := .F.
      RETURN self

      INLINE METHOD terminate
      RETURN(::terminated := .T.)

      INLINE METHOD checktermination
             IF ::terminated
                ::terminated := .F.
                ::quit()
             ENDIF
      RETURN self

      INLINE METHOD execute(oBrowse)
             LOCAL mp1 := 0
             LOCAL mp2 := 0

             PostAppEvent(xbeU_RefreshAll ,mp1,mp2,oBrowse)
      RETURN self
ENDCLASS
was mache ich hier falsch?
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
AUGE_OHR
Marvin
Marvin
Beiträge: 12910
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Thread beenden

Beitrag von AUGE_OHR »

Manfred hat geschrieben:Stattdessen mache ich jetzt Thread := NIL.
"fast" richtig ... vorher noch

Code: Alles auswählen

oThread:setInterval(NIL)
siehe Helpfile :setInterval()
Der Thread bleibt aktiv bis das Zeitintervall wieder auf NIL gesetzt wird. Erst dann wird der Thread beendet.
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21200
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Thread beenden

Beitrag von Manfred »

OK,

so hatte ich das ganz zu Anfang. War mir aber nicht sicher, ob es eine elegante Lösung ist.
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!!
Antworten