Thread und :setStartTime()

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

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

Re: Thread und :setStartTime()

Beitrag von Manfred »

Also, nochmal zu Fuß:

Bevor :start() aufgerufen wird, wird beim Starten des Wacheprogramms dafür gesorgt, dass der Thread auf jeden Fall erstmal losrennt. Dann rennt der thread los, arbeitet alles ab und prüft dann, ob evtl. die nächste Startzeit (Interval) anders ist, als sein(e) bisherige(s). Ist dem so, wird das Intervall neu gesetzt, wenn nicht, dann bleibt es so. Das wird aber erst gemacht, nachdem alles durch ist. Jetzt kann aber passieren, dass der Thread von Hand angeworfen wird. Nur mal um zwischendurch zu prüfen. Oder aber es kann sein, das das Prüfintervall geändert wird in den Parametern. deshalb dieser Weg, den ich gewählt habe. Innerhalb jedes Vorganges prüft der Thread, ob sich für ihn irgendwas geändert hat in Sachen Ausführungszeitraum. Das klappt ja auch alles so, nur bei der Ausführung mit der Zeitangabe habe ich meine Probleme. Die andere Sache, in der nur mit Intervallen gearbeitet wird, macht genau das was ich haben will.
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: 9356
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Thread und :setStartTime()

Beitrag von Tom »

Hallo, Uli.

Ich habe einfach ein "einmal" vor Deinem "täglich" angenommen. Du schreibst, dass Dein Execute einmal pro Minute aufgerufen wird, und innerhalb des Executes gibt es diesen Code:

Code: Alles auswählen

IF n12Uhr<=nSeconds .and. nSeconds<>n12Uhr10
    // Code wird nur zwischen 12:00 und 12:10 ausgeführt...
  ENDIF
Wenn die Zeit (nSeconds) größer/gleich 12.00 Uhr ist oder ungleich 12.10 Uhr, wird irgendwas gemacht. Also einmal pro Minute ab 12.00 Uhr, es sei denn, der Aufruf erfolgt exakt um 12.10 Uhr. :wink:
Herzlich,
Tom
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Thread und :setStartTime()

Beitrag von UliTs »

Tom, der Tippfehler war mir nicht aufgefallen ... :?
Ich war zu blöd, den richtigen Schluß zu ziehen :shock: :D

Uli

P.S. aber was meinst Du zu
"Aber eine ernste Frage: Wenn die Ausführung des Codes länger als 10 Minuten dauert, wird ::Execute() dann tatsächlich 10x gestartet (je 1x pro Minute) und läuft dann parallel? Ich meine nicht..."
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Thread und :setStartTime()

Beitrag von UliTs »

Manfred, ich muss gestehen, ich habe Dein "erst mal zu Fuss..." nicht verstanden.
Bzw. das, was ich glaube zu verstehen, hat keinen sinnvollen Einsatz von SetStartTime() zur Folge ... (siehe soll sofort losrennen ...)

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Thread und :setStartTime()

Beitrag von Manfred »

Es funktioniert nicht. Der Thread interessiert sich einen Scheiß für die Tageszeitangabe. (zumindest so, wie ich glaube es ihm beibiegen zu müssen)
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: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Thread und :setStartTime()

Beitrag von AUGE_OHR »

Manfred hat geschrieben:Es funktioniert nicht. Der Thread interessiert sich einen Scheiß für die Tageszeitangabe. (zumindest so, wie ich glaube es ihm beibiegen zu müssen)
überprüfe doch mal was oThread:active zurück gibt.
IMHO kann man o:setInterval() und o:setStartTime() nicht verändern so lange oThread:active = .T. ist.
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Thread und :setStartTime()

Beitrag von Manfred »

Das kann so nicht sein, ich mache alles bei jedem Thread gleich. Nur das ich einmal das Intervall und einmal die Startzeit (neu) setze. Und die Intervalthreads klappen. Zumindest für eine Zeit lang.
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!!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Thread und :setStartTime()

Beitrag von UliTs »

Manfred hat geschrieben:Das kann so nicht sein, ich mache alles bei jedem Thread gleich. Nur das ich einmal das Intervall und einmal die Startzeit (neu) setze. Und die Intervalthreads klappen. Zumindest für eine Zeit lang.
Beim Intervall hast Du -glaube ich- Recht, Manfred. Bei der Startzeit, -glaube ich- aber nicht! Da macht es meines Erachtens auch kaum Sinn. Warum willst Du denn die Startzeit nach dem ::Start() noch einmal ändern?
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Thread und :setStartTime()

Beitrag von Manfred »

Also, nachdem ich jetzt die kompletten Threads bis auf das Mindeste reduziert habe, ist zumindest schonmal folgendes aufgefallen:

Wenn man einen Thread mit :setinterval() steuert, dann kann man ihn mit :setinterval(1) z.B. von Hand starten.
Wenn man einen Thread mit :setStartTime() steuert, dann reagiert er darauf nicht. Aber wie startet man dann so einen Thread von Hand außer der Reihe?
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: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Thread und :setStartTime()

Beitrag von Manfred »

Also,

kurzes Resultat. Ich habe es aufgegeben. Es klappt nicht. Ich rechne jetzt die Uhrzeit so um, das ich es als Intervall eingebe. Das klappt. Wer weiß, wo da wieder der Teufel im Detail steckt?
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!!
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Thread und :setStartTime()

Beitrag von UliTs »

Manfred,
ich glaube, es gibt ein grundsätzliches Verständnisproblem! Ich finde, da ist die Dokumentation auch oft missverständlich!

Es ist unmöglich, einen Thread mit SetIntervall zu starten! Warum?
Man muß zwischen dem Start eines Thread und den Ausführungszyklen unterscheiden!
Mit

Code: Alles auswählen

oThread:Start(...)
wird ein Thread gestartet. Das heißt aber noch nicht, das direkt ein Ausführungszyklus durchgeführt wird! Dies hängt von der Instanzvariable oThread:StartTime ab:
  • Hat bei Aufruf von oThread:Start(...) die Instanzvariable oThread:StartTime den Wert NIL, wird sofort ein Ausführungszyklus gestartet.

    Ansonsten wird erstmals ein Ausführungszyklus zur angegebenen Zeit gestartet.
Wenn ein Ausführungszyklus gestartet wird, bedeutet dies, dass der bei oThread:Start(...) angegebene Codeblock bzw. Funktion ausgeführt wird oder (bei einer abgeleiteten Klasse) oThread:execute(...) .
Wird der Ausführungszyklus beendet, gibt es 2 Möglichkeiten:
  • 1) oThread:Interval=NIL: Der Thread wird beendet
    oder
    2) oThread:Interval<>NIL bzw. >0: Der Thread ruht, bis nach Ablauf des Intervals der nächste Ausführungszyklus beginnt.
Vielleicht hilft dies noch zum Verständnis:
So lang oThread:Interval>0 ist, wird der Thread niemals beendet, wenn er einmal gestartet wurde! Selbst bei Benutzung von ::quit( QUIT_NORESTART ) wird automatisch oThread:Interval auf NIL gesetzt! Achtung: ::Quit(..) darf man nur innerhalb des Threads aufrufen.

Uli

P.S. Hoffe, ich habe keinen Quatsch erzählt und das Ganze war verständlich. :? :) :D
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
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 und :setStartTime()

Beitrag von AUGE_OHR »

Manfred hat geschrieben:Das kann so nicht sein, ich mache alles bei jedem Thread gleich. Nur das ich einmal das Intervall und einmal die Startzeit (neu) setze. Und die Intervalthreads klappen. Zumindest für eine Zeit lang.
ich sagte doch
überprüfe doch mal was oThread:active zurück gibt.
gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: Thread und :setStartTime()

Beitrag von Manfred »

Uli,

Meine oben genannte Versuchsreihe wurde vom setInterval am Anfang entfernt. Also es wird nur noch :Start angegeben. Da hatte ich wohl seiner Zeit irgendwas in den falschen Hals gekriegt, weil ich dachte der würde nicht sofort losrennen. Oder ich habe durch irgendwelche Änderungen später es überflüssig gemacht. Aber egal, es ist jetzt raus.

Jimmy,

was soll das mit dem :active bringen? Ich starte den Thread, dann schaue ich nach ob er evtl. gesperrt wurde durch irgendeine Aktion, also zwar laufen soll, aber nicht das ausführen was gewollt ist. Er soll dann zurück und in anderen Abständen immer wieder prüfen, ob er jetzt freigegeben wurde. Aber selbst wenn er seine Aufgabe erfüllt und eine neue Zeit gesetzt wurde (zu Prüfen) läuft er nicht wieder an. In der Startzeit steht aber ein Sekundenwert drin.

Wie gesagt, ich habe es jetzt anders gelöst und es scheint jetzt so zu klappen, wie ich es haben will.
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