Einzelnen Beitrag anzeigen

MisterIXI

Registriert seit: 4. Jun 2015
15 Beiträge
 
Delphi 7 Personal
 
#1

Timer läuft ab Mitternacht rückwärts

  Alt 1. Sep 2015, 13:07
Hallo zusammen,


So, zu meinem Problem:
Ich programmiere seit einiger Zeit an einem speziellen Zeitmesser herum, und bin vom hochzählen eines Timers ziemlich schnell auf das rechnen mithilfe der System zeit umgestiegen. An sich ist die Genauigkeit auf diese Weise wunderbar... Allerdings fängt der timer an, sobald die Systemuhr von 23:59 auf 00:00 umspringt, rückwärts zu laufen. Außerdem sind die ganzen Vergleiche die nebenbei ausgeführt werden natürlich auch hinfällig.

Meine Lösungsansätze bisher:
(der Timer läuft idR. weniger als 45 Minuten, aber man kann um sicherzugehen eine komplette Stunde als möglichkeit ansehen)

1. Eine Abfrage beim Starten ob die Systemzeit weniger als z.B. eine Stunde vor Mitternacht entfernt ist, und wenn das der Fall ist die ganze Berechnung zu verändern. -> ohne die Uhr des PCs zu beeinflussen (was natürlich nicht gewollt ist) sehe ich hier keinen Sinn.

2. Um 23:59:59 (am besten auf MS genau -> 23:59:59.999) Eine sekundäre Variable zuweisen, und eine neue Zeitmessung starten, auf die dann die Variable jedes mal draufgerechnet wird.



Meine Fragen:
Gibt es eine bessere Möglichkeit als die Systemzeit abzufragen um eine möglichst genaue Zeitmessung hinzubekommen?
Wie funktioniert TTime; wie weist man darauf Werte zu/wie funktionieren diese; Wie fragt man einen genauen Zeitpunkt ab... --> Habt ihr vielleicht einen Link zu einem Guten Eintrag der das ganze erklärt?
Vielleicht Ideen für bessere Lösungen des Problems?

Mein Code des Timers momentan:
Die TTime Variablen werden woanders zu weiteren Berechnungen mehrmals benutzt.
Code:
var
  T1, T2, TimeTemp : TTime;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);

begin
Label1.Caption:=IntToStr(Zeit);
  if T1 = 0
    then T1 := Time;
  TimeTemp := MilliSecondsBetween(T1, Time) / 24 / 60 / 60 / 1000;
  Label1.Caption:=FormatDateTime('nn:ss:zzz', TimeTemp);
end;
  Mit Zitat antworten Zitat