Zeitgesteuert zu einem Zeitpunkt x und nicht nach Intervall
-
Was ist denn das Problem, dass du den Timer und GetCurrentTime nicht nutzen willst? Anders ist dies nicht wirklich möglich.
-
Das Polling. Eine hohe Genauigkeit für große Intervalle erfordert nach Rangers Variante sehr viele Timeraufrufe.
-
Ach was. Alles, was er zu tun hat, ist einen Intervall von 1000 Millisekunden auszusetzen, und dann in der Timer-Behandlung die CTime (ich weiss, veraltert, aber noch tut sich es und braucht weniger Speicher)-Funktion GetCurrentSecond() aufzurufen und den Wert zu vergleichen.
-
Hallo zusammen,
danke für Eure Antworten. Es ist so, wie connan es sagte, ich wollte zu viel Rechenzeit vermeiden um nicht alle Sekunde die On Timer Funktion rufen zu müssen. Aber es scheint nicht viel anders zu gehen.
Wenn Euch noch etwas einfällt, dann raus damit.Vielen Dank,
Ranger
-
genau das macht 'er' doch schon und er findet, daß das nicht so toll ist. Wo ich ihm Recht gebe 
Edit: zu spät.
-
Ranger schrieb:
Hallo zusammen,
danke für Eure Antworten. Es ist so, wie connan es sagte, ich wollte zu viel Rechenzeit vermeiden um nicht alle Sekunde die On Timer Funktion rufen zu müssen. Aber es scheint nicht viel anders zu gehen.
Wenn Euch noch etwas einfällt, dann raus damit.Vielen Dank,
RangerLieß Dir doch nochmal den zweiten Post durch da steht wies geht

In Deinem Bsp. hieße das du würdest den Timer mit dem Intervall 0 zur Zeit t_0 starten. Im Eventhandler der quasi sofort aufgerufen wird schaust du wieviel Zeit dir noch zur 20. Sekunde der aktuellen oder nächsten Minute bleibt. Dann setzt Du das Timerintervall neu auf diesen Wert.
Damit wird der Timer (außer beim ersten mal) nur dann aufgerufen wenn die Zeit ran ist
-
Was bitte verstehst du unter Rechenzeit?
Wenn ich mit OnTimer und GetCurrentSecond oder einem einfachen hochzählen eines int-Wertes arbeite nimmt das nicht wirklich viel Rechenzeit in anspruch. Wenn du die Funktion nur aufrufst wenn z.B. i = 20 ist, und in der restlichen Zeit das ganze vie if() überspringst ist die rechenzeit sehr gering. Du darfst natürlich nich alle 50ms pollen. Aber 1000ms sollten ausreichen.
-
Hallo zusammen,
Rechenzeit meine ich, dass mein Hauptproggy (der Dialog) alle Sekunde nachsehen müsste, ob schon die 20. Sekunde der aktuellen Minute ran ist.
Ich hab das jetzt in einen Thread gepackt, der die Systemuhr überwacht (GetCurrentTime() + GetSecond()) und der sendet, wenn es soweit ist, eine MEssage an den HAuptdialog und der macht dann was zu tun ist.
@Connan:
Deine Methode geht natürlich auch und hat definitiv weniger Aufrufe von OnTimer() als mein Weg vorher. Da ich es jetzt aber in einen Thread gepackt hab, hat der nicht mehr OnTimer(), sondern, wenn er die ZEit überprüft hat und es ist noch nicht soweit, dann Sleep(1000) und nochmal sehen. Der Thread lebt nur dafür.Danke für Eure Ideen.
Ranger
-
Aber da machst Du doch genau das selbe wie vorher und hast dazu einen (überflüssigen) Thread laufen

-
Einen Thread für so eine "einfache" arbeit zu nutzen ist meiner Meinung nach noch Rechenzeitintensiver als ein simpler Timer, der alle Sekunde eine Funktion startet, die Eh Übersprungen wird, wenn nich 20 sekunden vergangen sind. Aber solange es funktioniert und seinen Dienst tut

Hoffentlich ists nur für Private Zwecke
-
Natürlich mache ich in dem Thread das Gleiche wie mit einem Timer, der läuft aber im Hintergrund abseits meines Dialoges und sendet nur NAchrichten aus. Ich war der Meinung, dass bei einer OnTimer() Funktion noch einiges mehr intern abgehandelt werden muss, als man so sehen kann. Ich denke der Thread nimmt dann diese Arbeit vom Dialog weg.
@Uruk-h4j:
Es geht nich drum ob 20 sekunden vergangen sind, das ist mit einem Timer definitiv einfacher, ich möchte immer zu einem bestimmten Zeitpunkt x eine Aktion starten:12:33:20
12:34:20
12:35:20
...mir kommt es auf die 20. Sekunde eine jeden Minute an.
Viele Grüße,
Ranger
-
Frage an sich: Hast du es mit einem Timer schon probiert oder bist du einfach der Meinung, dass es nicht klappt oder schwierig ist und ein Thread besser ist?
Auch das Abfragen alle Minute und dann schauen ob wir die 20te Sekunde erreicht haben ist kein Problem.
Aber wie gesagt, wenn es mit dem Thread läuft und dir das reicht, dann lass es so. Aber ich würde das ganze nochmal mit einem Timer versuchen (wenn du es nicht schon getan hast), denn sowas in einen Worker-Thread zu packen ist wie mit Kannonen auf Mikroben schießen.