Probleme mit Timer bzw. Zeit-Anzeige
Hallo Delphi-Kollegen!!
Ich brauche eine zuverlässige Methode, um Zeiten in einem Intervall von 100 ms zu messen. Diese Zeiten werden gemeinsam mit anderen Daten gespeichert und später für die Wiedergabe wieder eingelesen und angezeigt. Soweit so gut... Jetzt hab ich das Ganze mal so gemacht:
Delphi-Quellcode:
In der GetCurrTimeInDateTime wird die Differenz aus einen Startwert (TDateTime mittels Now) und einem aktuellen Wert (ebenfalls TDateTime mittels Now) errechnet und zurückgegeben.
(* Pro Intervall (100ms) wird die momentane Wiedergabezeit gesetzt *)
procedure TfmMain.tiPlayTimer(Sender: TObject); var lPlayTime : TDateTime; begin inc(fTimerCounter); //globale Zählervariable die hochgezählt wird, bis eine volle Sekunde erreicht wurde if (fTimerCounter MOD 10 = 0) then begin (* Momentane Wiedergabezeit während des Abspielens ermitteln und in der Form anzeigen *) lPlayTime := GetPlayDataInstance.GetCurrTimeInDateTime; lbCaptureTimeData.Caption := FormatDateTime('hh:nn:ss', lPlayTime); (* Wenn momentane Wiedergabezeit die Gesamtvideodauer erreicht --> Abbruch und zur Preview zurückkehren *) if (GetPlayDataInstance.GetCurrVideoPosAsInt64 >= GetPlayDataInstance.GetVideoDuration(videoRenderer_great)) then begin self.StopPlayingStartPreview; fTimerCounter := 0; end; end; end; Das Ganze funktioniert soweit auf den ersten Blick auch ganz gut.... Wenn man die Werte wiedergibt merkt man, daß er immer wieder Sekunden bei der Wiedergabezeit ausläßt. Z.b. springt er von Sekunde 10 gleich auf Sekunde 12. Dasselbe passiert bei den Sekunden 23, 34, 46 sowie 58. Jetzt hab ich schon öfters gelesen, daß der Timer nur mit einer geringeren Priorität ausgeführt wird und ich vermute mal, daß dies auch damit zusammenhängt... Hatte wer schon mal so ein Problem und wie läßt es sich lösen??? Bin über jeden guten Tipp sehr dankbar, weil ich schön langsam nicht mehr weiter weiß??!! :? LG Thomas |
Re: Probleme mit Timer bzw. Zeit-Anzeige
|
Re: Probleme mit Timer bzw. Zeit-Anzeige
Wenn ich die Zeilen...
Delphi-Quellcode:
...weglasse, funktioniert es reibungslos!!?? :stupid:
inc(fTimerCounter); //globale Zählervariable die hochgezählt wird, bis eine volle Sekunde erreicht wurde
if (fTimerCounter MOD 10 = 0) then begin end; |
Re: Probleme mit Timer bzw. Zeit-Anzeige
Ich tippe darauf, dass du "zuviel" zwischendurch tust und die Messages nicht zeitgemäß abgearbeitet werden können.
procedure TForm1.Timer1Timer(Sender: TObject); begin inc(aktuell); if (aktuell mod 10=0) then Edit1.Text := TimeToStr(now-start); end; procedure TForm1.FormCreate(Sender: TObject); begin start := now; end; procedure TForm1.Button1Click(Sender: TObject); var i : integer; begin for i:=0 to 100 do begin sleep(100); // Application.ProcessMessages; end; end; Aber nur eine Vermmutung, denn bei mir läuft es einwandfrei sekundengenau. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 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