AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Immer wiederkehrende Aufgaben realisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Immer wiederkehrende Aufgaben realisieren

Ein Thema von RWarnecke · begonnen am 29. Jul 2008 · letzter Beitrag vom 7. Aug 2008
Antwort Antwort
Seite 2 von 3     12 3      
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#11

Re: Immer wiederkehrende Aufgaben realisieren

  Alt 29. Jul 2008, 12:04
Kann ich ohne genaue Infos nicht sagen. Tendentiell macht aber das bisschen Rechnen gar nichts. Die paar Takte sind vernachlässigbar.

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#12

Re: Immer wiederkehrende Aufgaben realisieren

  Alt 29. Jul 2008, 12:16
Zitat von taaktaak:
Hmmm, die Timer-Funktionalität wird also nur genutzt, wenn das Programm ins Tray gesetzt ist - sonst nicht?!
Korrekt so.
Zitat von taaktaak:
Nach einer Stunde ändern sich die Intervalle?
Die Intervalle bleiben immer gleich, wenn das Programm im Tray ist.
Zitat von taaktaak:
Wenn ich die Aufgabe des Timers in diesem speziellen Fall richtig interpretiere, gehe ich davon aus, dass keine besondere Genauigkeit notwendig ist. Ob ein Fenster 100ms früher oder später erscheint, ist vermutlich irrelevant.
Das ist nicht relevant. Selbst wenn es mal 500ms später oder früher angezeigt wird, macht das nichts aus. Es sollte nur auf jedenfall angezeigt werden. Die Genauigkeit spielt dabei eine nicht so große Rolle.

Startet die TTimer - Komponente den Interval neu, wenn ich Sie deaktiviere und dann wieder aktiviere ? Ich bin bis jetzt zumindest davon ausgegangen.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#13

Re: Immer wiederkehrende Aufgaben realisieren

  Alt 29. Jul 2008, 16:47
Zitat von RWarnecke:
Startet die TTimer - Komponente den Interval neu, wenn ich Sie deaktiviere und dann wieder aktiviere ? Ich bin bis jetzt zumindest davon ausgegangen.
Ja, dadurch kommen immer "Zeitverschiebungen" zustande, die sich im Laufe der Zeit spürbar summieren.
Wie brauchst Du denn den Timer: Immer zur vollen Stunde oder immer zur vollen Minute oder immer nach Abschluß eines Vorganges eine bestimmte Zeitdifferenz.
  • Interval := 60000;

    Timer ein

    Timerereignis
    Timer aus
    irgendwas arbeiten lassen
    Timer ein
Das zweite Timerereignis wird also eine Minute nach dem Abarbeiten des ersten Timerereignisses ausgelöst und nicht zur vollen nächsten Minute.

Eventuell kommst Du ja damit an Deinem Problem "vorbei":

Ein paar Konstanten für definierte Zeiträume
Delphi-Quellcode:
const
  iOneMinute : Integer = 60000; // eine Minute in Millisekunden
  iFiveMinutes : Integer = 300000; // Fünf Minuten in Millisekunden
  iFifteenMinutes : Integer = 900000; // Fünfzehn Minuten in Millisekunden
  iOneHour : Integer = 3600000; // Eine Stunde in Millisekunden
  iOneDay : Integer = 86400000; // Ein Tag in Millisekunden
Eine Funktion zum Berechnen der Zeitdifferenz bis zum nächsten Timerereignis.
Hier wird der Wert berechnet, der Interval zuzuweisen ist, bevor der Timer eingeschaltet wird.
iTimerInterval ist einer der obigen Konstanten Werte.

Delphi-Quellcode:
function CalcTimerInterval(iTimerInterval : Integer) : Integer;
Var
          dNow : Double;
begin
  // Interval setzen
  // Tagesdatum und Uhrzeit holen
  dNow := Now;
  // Den Tagesanteil holen (= Nachkommastellen).
  dNow := dNow - Trunc(dNow);
  // Rest bis Mitternacht holen.
  dNow := 1 - dNow;
  // Nachkommastellen mal Millisekunden pro Tag
  Result := Trunc(dNow * iOneDay);
  // wir benötigen den Rest bis zum angegeben Interval, damit der Timer
  // zur nächsten Minute, Stunde, 0 Uhr ... aktive wird.
  // (Der durchschnittliche Rechenfehler liegt bei 500 Millisekunden.)
  Result := (Result mod iTimerInterval);
end;
Habe einige Routinen zum Systemmonitoring, bei denen ich diese Berechnung einsetze. Die Routinen "schlagen" zur vollen Stunde, um Mitternacht, alle vollen fünf Minuten... zu. Die Abweichung durch das Berechnen ist immer kleiner 1 Sekunde. Damit kann ich für meinen Bedarf leben.

Stephan
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Immer wiederkehrende Aufgaben realisieren

  Alt 29. Jul 2008, 17:23
Bei einem so lang laufenden Timer kommt mir ein Waitable Timer in den Sinn. Wenn man ihn APCs auslösen lässt, ist das genauer als die Lösung mit TTimer und einfacher als Lösungen mit GetTickCount.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#15

Re: Immer wiederkehrende Aufgaben realisieren

  Alt 29. Jul 2008, 18:26
Die Timer sollen variabel sein. Der User soll sie anhand von Sekunden einstellen können, wann die Popups angezeigt werden. Diese Zeitverschiebung wie Ihr sie hier beschreibt, würde ja nur zustande kommen, wenn das Programm immer wieder aus dem Tray geholt wird und wieder zurück gelegt wird. Nur ist das bei meinem Test nicht der Fall. Das Programm wird gestartet und unten ins Tray gelegt, ohne irgendwas damit zu machen. Ich habe im Programm insgesamt 4 Timer. Davon wird 1 Timer beim starten des Programms aktiviert und die restlichen 3 Timer werden aktiviert, wenn das Programm in den Tray geht. Der eine Timer, der beim Starten des Programms aktiviert wird, arbeitet zuverlässig. Nur die drei Timer, die beim ablegen ins Tray aktiviert werden, arbeiten gut nach einer Stunde nicht mehr korrekt. Das ist das was ich nicht verstehe.

Das Programm läuft ohne irgend ein Zugriff oder Benutzung vom User. Es werden nur die Popups erzeugt und angezeigt.

Edit:
Wie sieht das aus, mit dem Befehl SetTimer ? Ist der vielleicht besser als die TTimer-Komponente ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Immer wiederkehrende Aufgaben realisieren

  Alt 29. Jul 2008, 18:52
TTimer ist nur eine Kapselung von SetTimer. Waitable Timer sind genauer.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
r2c2

Registriert seit: 9. Mai 2005
Ort: Nordbaden
925 Beiträge
 
#17

Re: Immer wiederkehrende Aufgaben realisieren

  Alt 1. Aug 2008, 11:27
Zitat von RWarnecke:
Diese Zeitverschiebung wie Ihr sie hier beschreibt, würde ja nur zustande kommen, wenn das Programm immer wieder aus dem Tray geholt wird und wieder zurück gelegt wird.
Nö. Die treten auch dann auf, wenn du in OnTimer den Timer immer aus und wieder anschaltest. Tust du das?

mfg

Christian
Kaum macht man's richtig, schon klappts!
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#18

Re: Immer wiederkehrende Aufgaben realisieren

  Alt 1. Aug 2008, 12:28
Zitat von r2c2:
Nö. Die treten auch dann auf, wenn du in OnTimer den Timer immer aus und wieder anschaltest. Tust du das?
Nein, nicht im OnTimer. Lediglich nur dann wenn das Programm aus dem Tray kommt, wird es deaktiviert und wenn das Programm ins Tray gelegt wird, wieder aktiviert.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#19

Re: Immer wiederkehrende Aufgaben realisieren

  Alt 7. Aug 2008, 08:48
Ich habe da noch eine Frage, wenn ein TTimer schon läuft und ich dann Timer.Enabled := true setze, addiert sich dann die Zeit auch wieder ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#20

Re: Immer wiederkehrende Aufgaben realisieren

  Alt 7. Aug 2008, 08:49
Das Aktivieren eines Aktiven Vorgangs hat keine Auswirkung
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz