AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeitfunktion springt

Ein Thema von Hedge · begonnen am 17. Nov 2009 · letzter Beitrag vom 18. Nov 2009
Antwort Antwort
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#1

Zeitfunktion springt

  Alt 17. Nov 2009, 22:38
Ich lasse einen Timer laufen der alle 500 Sekunden mit folgender Funktion an 2 Labeln eine Zeit übergibt:

Delphi-Quellcode:
function FormatTime(ZeitDifferenz:UInt64): String;
  var
  iSekunden,iMinuten,iStunden:UInt64;
begin
   Zeitdifferenz:=Ceil(ZeitDifferenz div 1000);
   iSekunden:=ZeitDifferenz mod 60;
   ZeitDifferenz:=trunc(ZeitDifferenz / 60);
   iMinuten:=ZeitDifferenz mod 60;
   ZeitDifferenz:=trunc(ZeitDifferenz / 60);
   iStunden:=ZeitDifferenz mod 24;
   ZeitDifferenz:=trunc(ZeitDifferenz / 24);
   result:=IntToStr(ZeitDifferenz)+'d, '+IntToStr(iStunden)+'h, '+IntToStr(iMinuten)+'m, '+IntToStr(iSekunden)+'s';
end;
Leider springen die Sekunden an einigen Stellen schnell von einer zur Anderen, also nicht so gleichbleibend wie man es sich wünschen würde.

Wenn ich die Interval-Zeit auf 100ms reduziere dann geht es vernünftig, aber ich will so wenig Prozessorzeit wie möglich verschwenden dafür.
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Zeitfunktion springt

  Alt 17. Nov 2009, 22:43
Der durch TTimer zur verfügung gestellte Timer ist nicht sehr genau (16 ms-Raster).

z.B. der Timer kommt um

12:00:00,990 -> Anzeige: 12:00:00
12:00:01,499 -> Anzeige: 12:00:01
12:00:02,001 -> Anzeige: 12:00:02

-> 12:00:01 war nur für ca. 0,5 Sekunden sichtbar!
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Zeitfunktion springt

  Alt 17. Nov 2009, 22:48
Ja genau daran habe ich auch gedacht.

Ist jetzt auch nicht DIE weltbewegende Funktion, aber gibt es Varianten zum TTimer?
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
uoeb7gp
(Gast)

n/a Beiträge
 
#4

Re: Zeitfunktion springt

  Alt 17. Nov 2009, 23:24
Hi, Präzision ist abhängig von.

1. Präemtives Multitasking, ein Prozess bekommt folgende Rechenzeit vom Win32 Task-Scheduler zugeteilt.
Bei Desktop OS 15 ms. Server OS 30 msec
D.h. Je mehr Prozesse die Zugeteilte Rechenzeit auch verbrauchen, desto weniger genau arbeitet das Timerevent.
Win32 ist kein Echtzeit-Betriebssystem.
2. Auslastung und Prioritätsboost der einzelnen Prozesse und Threads im System sind zu berücksichtigen.


timeSetEvent bei Verwendung einer Callback Funktion und Priority TIME_CRITICAL des Mainprozesses, ergibt die
größte Genauigkeit, ohne zusätzlich zuviel an Rechenzeit zu verbrauchen.
Parameter uResolution berücksichtigen.

Also eine Genauigkeit im USER-Mode kleiner 15 msec ist nicht ohne die Altagstauglichkeit des OS einzuschränken
möglich. Ring0 implementierungen da mit Delphi nicht ohne Kopfstände möglich, seien mal hinten angestellt.

MMRESULT timeSetEvent(

UINT uDelay,
UINT uResolution,
LPTIMECALLBACK lpTimeProc,
DWORD dwUser,
UINT fuEvent
);

lg.
  Mit Zitat antworten Zitat
uoeb7gp
(Gast)

n/a Beiträge
 
#5

Re: Zeitfunktion springt

  Alt 17. Nov 2009, 23:31
Sorry, hätte zuerst mal suchen sollen, diesen Thread hatten wir schon.

Siehe: http://www.delphipraxis.net/internal...t.php?t=103162

PS. das mit den < 1 msec (Präzision) ist so nicht korrekt, siehe vorherigen Post!

lg.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: Zeitfunktion springt

  Alt 18. Nov 2009, 07:57
Du könntest einfach das Intervall auf 1 Sekunde stellen - dann bist du zwar der echten zeit um einen Hauch hinterher, aber die Uhr läuft ruhig
(Und 500ms Verzögerung sollte man für die Anzeige noch verschmerzen können ...)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Zeitfunktion springt

  Alt 18. Nov 2009, 08:02
Zitat von jfheins:
Du könntest einfach das Intervall auf 1 Sekunde stellen
Wird aber dazu führen das ab und zu trotzdem sprünge sind wenn statt 1 Sekunde durchschnittliche 1,001 Sekunden zwischen Timer-Events vergehen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: Zeitfunktion springt

  Alt 18. Nov 2009, 11:01
Nimm einen Timer mit 100 oder 50 ms, dann fällt das Springen fast nicht auf, denn 10 bis 20 Mal pro Sekunde guckt eh keiner drauf.
(bei 100 ms dauert das "Springen" ja nur eine 10-tel Sekunde, bis die Zeit wieder stimmt)

Und von der CPU-Belastung ist es auch noch verträglich
und notfalls kann man auch noch eine Zeitsperre einbauen, welche dann in der Timerereignisprozedur nochmals die Sekunden prüft und nur bei Änderung den Rest ausführt.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:41 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