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

Thread und :setStartTime()

Beitrag von Manfred »

Ich habe mal wieder ein Problem mit der Threadsteuerung. Es wird vor dem :Start ein Setinterval(nZeit) gesetzt, damit das Teil sofort losrennt, beim :start. Danach soll aber eine Uhrzeit eingetragen werden, wann er das nächste mal laufen soll. Das klappt aber wohl nicht. Die zeit, die dann angegeben wird, wird anscheinend ignoriert. Der Thread läuft nicht wieder an, wenn die Zeit erreicht 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!!
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Thread und :setStartTime()

Beitrag von georg »

Hallo, Manfred -


laut Dokumentation wird eine Ganzzahl erwartet, "Sekunden seit Mitternacht", und keine Uhrzeit. Ist das vielleicht die Ursache?


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
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 »

Hi Georg,

klar, natürlich gebe ich Sekunden an.
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!!
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Thread und :setStartTime()

Beitrag von georg »

Hallo, Manfred -


haste mal ein Beispiel?


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
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 »

sischer datt

Code: Alles auswählen

oThread:setStartTime(TimeToSec(Time())+10)
oThread:start("wache")
// jetzt rödelt der Thread herum
oThread:setStartTime(TimeToSec("12:00:00"))
genügt das ?
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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Thread und :setStartTime()

Beitrag von brandelh »

Hi,

wie kompliziert ;-)

seconds()+10

liefert die Sekunden ab Mitternacht + 10 ;-)
Gruß
Hubert
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 »

Ja Hubert, war aus der Hüfte geschossen zum testen. Du hast natürlich Recht. Aber ist damit mein Problem gelöst? :D
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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Thread und :setStartTime()

Beitrag von brandelh »

guckst du mal in die Hilfe ...
Wenn :setStartTime() und :setInterval() benutzt werden, sollte :setInterval() in :atStart() aufgerufen werden.
Ohne SetInterval() wird es wohl zu der Uhrzeit einmalig ausgeführt, mit nach der Ausführung erneut ...
Ich vermute aber du wärest besser bedient, wenn der Code der ausgeführt wird (ohne SetInterval) selbst eine neue Startzeit einträgt.
Bei :setStartTime() solltest du auch den Rückgabewert auswerten ... und wenn er kleiner als seconds() ist, startet er erst am nächsten TAG !
Gruß
Hubert
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 »

Hubert,

das alles mache ich doch. Das Teil soll auch nur 1x am Tag zu einer bestimmten Uhrzeit laufen.
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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Thread und :setStartTime()

Beitrag von brandelh »

Hallo Manfred,

ich nutze solche Startwerte nicht, ich mache lieber meine Schleifen ;-)

Code: Alles auswählen

function RunThisHighNoonUntilDate(cAktionTime, dStopDate)  // 1. Parameter wie time(), 2 ist ein Datum 
    do while date() < dStopDate
         do while time() > cAktionTime
              sleep(100) // oder 1000 ... je nach Genauigkeit - verhindert Prozessorlast
         enddo
         MachWas
    enddo
return

Die Funktion einfach in einem Thread mit 2 Parametern aufrufen und starten ...

Code: Alles auswählen

 
   oThread := Thread():new()
   oThread:start("RunThisHighNoonUntilDate", "12:00:00" , ctod("31.12.2100") )  // reicht das ;-)
Gruß
Hubert
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 »

Hubert,

das ist ja alles schön und gut, aber ist es nicht so, als wenn man mit dem einen Fuß0 auf dem Gaspedal und mit dem anderen auf der bremse steht, damit man nicht so schnell fährt? Es würde genügen den Gasfuß etwas weniger feste zu drücken. Ich möchte schon die Möglichkeiten nutzen, die mir Xbase++ anbieten möchte. Ich denke mal, dafür ist SetStartTime() doch wohl gedacht, oder?
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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Thread und :setStartTime()

Beitrag von brandelh »

Du unterstellst mir ich JAGE und BREMSE den Rechner gleichzeitig ? :angry4: :angry5: :angry6: :banghead: angry9:

;-)

Denk mal ein bischen nach sleep(1) wird von Xbase++ zur Verfügung gestellt und legt diesen Thread 1/100 Sekunden auf Eis.
Man kann auch sleep(100) aufrufen, aber dein Vorwurf wäre nur berechtigt, wenn ich eine Endlosschleife mit Berechnungen zur Einbremsung verwendet hätte ... :badgrin:

Wenn du es anders möchtest, OK - dann probiere wie es funktioniert :D

aber mach mir meine Vorschläge nicht madig [-X

:wink:
:D :D :D
Gruß
Hubert
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 »

:( war nicht so gemeint....
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
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Thread und :setStartTime()

Beitrag von brandelh »

Keine Angst, ich bin nicht beleidigt :D
Gruß
Hubert
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:

Code: Alles auswählen

oThread:setStartTime(TimeToSec(Time())+10)
oThread:start("wache")
// jetzt rödelt der Thread herum
oThread:setStartTime(TimeToSec("12:00:00"))
hm ... :-k

ein o:setStartTime(), was richtig, vor dem o:start() gesetzt wird "verzögert" das sofortige ausführen des Threads.

wenn der Thread aber schon "läuft" kann man IMHO nicht "nachträglich" die "Verzögerung" ändern.
du muss erst den Thread "beenden", die neue "Verzögerung" per o:setStartTime() setzen und per o:start() neu aktivieren.
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 »

Mit Verzögerung meinst Du jetzt das Setzen der neuen Startzeit? Wird denn bei einem einmaligen Setzen der Startzeit der Thread dann jeweils 1x am Tag zur entsprechenden Zeit gestartet, ohne es wiederholen zu müssen? Es geht mir eigentlich auch darum, dass ich die jeweilige Startzeit jederzeit anpassen 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!!
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:Mit Verzögerung meinst Du jetzt das Setzen der neuen Startzeit? Wird denn bei einem einmaligen Setzen der Startzeit der Thread dann jeweils 1x am Tag zur entsprechenden Zeit gestartet, ohne es wiederholen zu müssen? Es geht mir eigentlich auch darum, dass ich die jeweilige Startzeit jederzeit anpassen kann.
Hallo Manfred,

mit

Code: Alles auswählen

oThread:Start()
startet man einen Thread.
Wenn zu diesem Zeitpunkt ::SetStartTime() auf NIL gesetzt war, wird der gestartete Thread sofort ausgeführt.
Wenn zu diesem Zeitpunkt ::SetStartTime() auf 1000 gesetzt war, wird der gestartete Thread erst 1000 Sekunden später ausgeführt.
Edit 12:10: korrekt ist vermutlich im 2. Fall: ... wird der gestartete Thread erst 1000 Sekunden nach Mitternacht ausgeführt.

Wenn Du möchtest, dass der Programmcode in der Methode ::Execute() bzw. der beim Aufruf von ::Start() übergebene Codeblock mehrfach ausgeführt werden soll, mußt Du mit SetIntervall() arbeiten...
Z.B.

Code: Alles auswählen

oThread:setIntervall( 60*100 )   // Alle 60 Sekunden Methode Execute() aufrufen
...
METHOD MeineThreadKlasse:Execute()    // Methode wird alle 60 Sekunden aufgerufen.
LOCAL n12Uhr,n12Uhr10,nSeconds
  n12Uhr   := 12*60*60
  n12Uhr10 := n12Uhr + 10*60
  nSeconds := Seconds()
  IF n12Uhr<=nSeconds .and. nSeconds<>n12Uhr10
    // Code wird nur zwischen 12:00 und 12:10 ausgeführt...
  ENDIF
RETURN self  
Edit 13:44: muß natürlich .. .and. nSeconds <=n12Uhr10 ... heißen

Der obige Code wird z.B. täglich zwischen 12:00 und 12:10 ausgeführt. Wenn Du möchtest, dass er dabei genau 1x täglich ausgeführt werden soll, müsstest Du noch weitere Vorkehrungen treffen :-) .

Viele Grüße

Uli
Zuletzt geändert von UliTs am Do, 27. Sep 2012 13:46, insgesamt 2-mal geändert.
-------
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 »

Hi Uli,

das mit dem SetStartTime verstehe ich aber ganz anders. Wenn man SetStartTime(1000) setzt, dann wird der doch zu der Uhrzeit 1000 Sekunden ab Mitternacht ("00:16:xx") gestartet und nicht 1000 Sekunden nach :start()...
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 »

Hallo Manfred,

Du hast zumindest teilweise recht! Wenn ich mir die Dokumentation anschaue, würde ich SetStartTime(1000) wie folgt deuten:

Sind zum Zeitpunkt von :Start() weniger als 1000 Sekunden seit Mitternacht vergangen, wird ::Execute() noch am gleichen Tag 1000 Sekunden nach Mitternacht ausgeführt, ansonsten erst am nächsten Tag.

Ich habe leider keine Zeit, dass zu testen :-( . Aber wenn Du etwas rausbekommst ...

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 »

das ist schon so. hat aber nichts mit meinem Problem zu tun, wie ich meine.
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 »

Der obige Code wird z.B. täglich zwischen 12:00 und 12:10 ausgeführt.
Nö. Er wird nach 12.00 Uhr einmal pro Minute ausgeführt, nur exakt um 12.10 nicht. :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 »

Manfred hat geschrieben:

Code: Alles auswählen

oThread:setStartTime(TimeToSec(Time())+10)
oThread:start("wache")
// jetzt rödelt der Thread herum
oThread:setStartTime(TimeToSec("12:00:00"))
Ich finde schon, dass es etwas mit Deinem Problem zu tun hat. Ist Dein obiger Code überhaupt erlaubt?
a) Du setzt die Startzeit auf +10 Sekunden
b) Du startest den Thread
c) bevor der Thread überhaupt ausgeführt (ausführen nicht mit starten verwechseln ;-) ) wurde (nämlich erst 10 Sekunden später) änderst Du setStartTime()
Ist dies erlaubt? Wirkt sich dies bereits auf den gestarteten Thread aus -> er wird erst später um 12:00 Uhr ausgeführt?
Was für einen Sinn macht das?

Ich hatte Dich so verstanden, dass der Thread nach dem Start mehrfach (z.B. täglich um 12:00 Uhr) ausgeführt werden soll ohne das er beendet wird. Und das geht nur mit ::SetIntervall()

Uli

P.S. darf man ::SetIntervall() innerhalb von ::Execute() aufrufen? Dann wird mein Quellcode noch viel einfacher!
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
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.

"SetIntervall()" darf man überhaupt nicht aufrufen. Es gibt keine Methode dieses Namens. :wink:

Ich kann allerdings keine Beschränkungen für den Aufruf der Methode "SetInterval()" sehen. Warum also auch nicht im Execute()?
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 hat geschrieben:
Der obige Code wird z.B. täglich zwischen 12:00 und 12:10 ausgeführt.
Nö. Er wird nach 12.00 Uhr einmal pro Minute ausgeführt, nur exakt um 12.10 nicht. :wink:
Was denn jetzt :-) . Erst sagst Du nö und dann mit anderen Worten das Gleiche wie ich :D .

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...

Uli
-------
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 »

Tom hat geschrieben:... der Methode "SetInterval()" ...
SetInterval() ist der Aufruf einer Funktion, ::SetIntervall() der einer Methode :razz:
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten