Thread pausieren [ERLEDIGT]

Klassen, Objekte, Methoden, Instanzen

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18038
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Thread pausieren [ERLEDIGT]

Beitrag von Manfred » Mi, 08. Dez 2010 21:33

Hi,

wie lasse ich eigentlich einen Thread pausieren?
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 13072
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Kontaktdaten:

Re: Thread pausieren

Beitrag von Jan » Mi, 08. Dez 2010 21:45

ThreadWait()

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

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18038
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread pausieren

Beitrag von Manfred » Do, 09. Dez 2010 6:48

Grrr,

habe es gefunden. Wie blind kann man eigentlich sein?
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18038
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread pausieren

Beitrag von Manfred » Do, 09. Dez 2010 6:54

Aber ob ich das so gebrauchen kann?

Ich möchte einen mit Intervallzeit gestarteten Thread per Pushbutton anhalten um das Ergebnis am Bildschirm anzusehen und dann soll er mit einem Pushbutton wieder weiterlaufen. Ich verstehe Treadwait() irgendwie anders. Das ein Thread auf einen anderen wartet. Das brauche ich in dem Fall nicht.

Naja, ich könnte natürlich auch die Intervallzeit für den Moment extrem hoch setzen. Er wird ja entweder kurz danach wieder gestartet, oder abgebrochen.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1909
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Kontaktdaten:

Re: Thread pausieren

Beitrag von Herbert » Do, 09. Dez 2010 10:15

Threadwait wird bei dir kaum passen. Threadwait wartet auf den Abschluss eines Threads (bei Zeitangabe sogar nur innerhalb dieser Zeit).

Falls der Pushbutton innerhalb deines Threads ist, der warten soll, dann machs plump: Einfach das Ergebnis in einer modalen Box anzeigen, so fährt das Programm erst wieder dort weiter, wenn du diesen Dialog abgeschlossen hast (ähnlich wie bei JA/NEIN-Frage-Fenster).
Grüsse Herbert
Immer in Bewegung...

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14546
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Thread pausieren

Beitrag von brandelh » Do, 09. Dez 2010 11:34

Hi,

ich habe eine Auswertungsroutine, die abgebrochen werden kann.
Hier nutze ich eine private variable zum steuern, man könnte auch eine lokale per Parameter
an den Thread (per Referenz) übergeben oder eine exportierte Instanzvariable des Threads,
aber so ist es einfacher:

Code: Alles auswählen

m->Abbruch := .f.
...
do while ! eof() // Im Thread....
    ...
    if m->Abbruch
       Thread beenden

du könntest hier einfach eine Wartebedingung einbauen:

Code: Alles auswählen

m->Warten := .f.
...
do while ! eof() // Im Thread....
    ...
    do while m->Warten
        sleep(10)   // 10 mal pro Sekunde oder weniger ? prüfen
    enddo
    ...
Gruß
Hubert

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18038
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread pausieren

Beitrag von Manfred » Do, 09. Dez 2010 11:40

Hm,

das mit der Wartebedingung. Man könnte ja dann einfach den Aufruf ohne Ablauf wieder zurückschicken. Der Thread läuft zwar weiter, aber arbeitet die Funktion nicht ab. Das wäre möglich. In meinem Falle vielleicht sogar eine gute Lösung.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14546
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Thread pausieren

Beitrag von brandelh » Do, 09. Dez 2010 14:47

In meinem Beispiel wird der Thread mitten in seiner Verarbeitung angehalten, ohne dass Systemresourcen verschwendet werden :!:
Dennoch ist der Thread genau an der richtigen Stelle zum Weiterarbeiten.
Manfred hat geschrieben:Man könnte ja dann einfach den Aufruf ohne Ablauf wieder zurückschicken. Der Thread läuft zwar weiter, aber arbeitet die Funktion nicht ab.
Ich weiß nicht was du damit meinst, zurückschicken klingt wie beenden, dann läuft aber auch nichts mehr ;-)

Wie auch immer, hauptsache du weißt was du tust :D
Gruß
Hubert

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18038
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread pausieren

Beitrag von Manfred » Do, 09. Dez 2010 14:53

ok,

anders ausgedrückt: die Funktion, die der Thread immer wieder aufruft, wir einfach übersprungen durch eine IF Schleife.Der Thread als solcher kann/darf ja ruhig weiterlaufen, er darf bloß die Routine nicht aufrufen. Gestoppt würde der Thread dann durch einen anderen Button.
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 7284
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Kontaktdaten:

Re: Thread pausieren

Beitrag von Tom » Do, 09. Dez 2010 15:20

Wenn Dein Thread immer wieder eine Funktion aufruft, die die eigentliche Arbeit leistet, muss diese Funktion nur bei jedem Aufgerufenwerden prüfen, ob z.B. eine statische Variable (oder eine Instanzvariable der abgeleiteten Thread-Klasse, was viel eleganter wäre) gesetzt ist oder nicht. Und wenn sie gesetzt ist, wartet die Funktion, wie Hubert das gezeigt hat, und gibt nichts zurück. Nur wenn die Variable nicht gesetzt ist, macht sie was. Für den Abbruch des Threads, was ein weiterer Schuh wäre, müsste dann die Schleife im Thread selbst eine weitere iVar prüfen. Also, wie gesagt: Eigene Thread-Klasse ableiten, um zwei iVars "lThreadPause", "lThreadAbort" ergänzen, Threadobjekt an Funktion übergeben, Variableninhalte regelmäßig prüfen. ThreadWait() oder Synchronize() sind für diese Geschichte ungeeignet, da sie den aufrufenden Thread betreffen.
Herzlich,
Tom

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14546
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: Thread pausieren

Beitrag von brandelh » Do, 09. Dez 2010 15:22

Wenn du in dem Thread eine Schleife hast wie diese hier:

Code: Alles auswählen

... im Thread
    do while ?
        MeineFunktion()
    enddo
musst du halt sicherstellen, dass der Thread nicht sofort wieder weiter in die Schleife geht,
das würde sonst den Rechner richtig belasten:

Code: Alles auswählen

... im Thread
    do while ?
        if M->Arbeiten   // wehe wenn das hier falsch wird ;-) 
           MeineFunktion()
        endif
    enddo
besser so:

Code: Alles auswählen

... im Thread
    do while ?
        if M->Arbeiten   // wehe wenn das hier falsch wird ;-) 
           MeineFunktion()
        else
           sleep(10)
        endif
    enddo
wenn aber dein Thread einfach "ausgeht" und nach einem Zeitinterval neu startet,
dann paßt das ohne sleep() ;-)
Gruß
Hubert

Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 18038
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel

Re: Thread pausieren

Beitrag von Manfred » Do, 09. Dez 2010 15:24

Jungs,

Danke, ich habe es mit den Threadvars gemacht und bin gerade dabei es zu implementieren, sprich auch zu testen. =D>
Gruß Manfred
Mitglied der XUG Leverkusen
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite

Antworten