Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Sekunden und Millisekunden anzeigen (https://www.delphipraxis.net/106013-sekunden-und-millisekunden-anzeigen.html)

TheMiller 3. Jan 2008 22:24


Sekunden und Millisekunden anzeigen
 
Hallo,

ich versuche die zwischen zwei Zeitpunkten vergangene Zeit in Sekunden und Millisekunden anzuzeigen. Ich habe auch schon eine Funktion, aber die Zeit läuft irgendwie zu schnell...

Delphi-Quellcode:
var
  h, m, s: Word;
  Diff: Integer;
begin
  TimeNow:=GetTickCount;
  Diff:=TimeNow - StartTime;
  m:=Diff div 60;
  s:=Diff mod 60;
  Form1.Caption:=Format('%.2d:%.2d', [m, s]);
Wie bekomme ich da auchnoch die ms dazu?

Danke

omata 3. Jan 2008 22:29

Re: Sekunden und Millisekunden anzeigen
 
Schau dir mal DecodeDateTime an.

TheMiller 3. Jan 2008 22:30

Re: Sekunden und Millisekunden anzeigen
 
Meine Hilfe geht nicht.. Hab Windows Vista und Delphi 7 und da geht die Hilfe nicht mehr??

fLaSh11 3. Jan 2008 22:31

Re: Sekunden und Millisekunden anzeigen
 
Also ich finde den QueryPerformanceCounter am besten.

Das hier
Hier im Forum suchenQueryPerformanceCounter
Hier im Forum suchenQueryPerformanceFrequency

denötigst du, um berechnungen anzustellen.

Der hat mich nie im Stich gelassen :firejump:

//Edit: Natürlich das für dich interessante ist, dass das Ergebnis in µSek herauskommt. Also nur noch durch 1000 für mSek bzw. durch 1000² für Sek teilen.

Blackheart 3. Jan 2008 22:42

Re: Sekunden und Millisekunden anzeigen
 
Zitat:

Zitat von DJ-SPM
Meine Hilfe geht nicht.. Hab Windows Vista und Delphi 7 und da geht die Hilfe nicht mehr??

Schau hier

grenzgaenger 3. Jan 2008 23:22

Re: Sekunden und Millisekunden anzeigen
 
weshalb soll das nicht gehen?
Delphi-Quellcode:
var
 anfang, differenz: cardinal;
begin
 anfang := gettickcount();  
 //was dazwischen
 differenz := GetTickDiff(Anfang, GetTickCount()); //differnz in millisekunden
was mir aufgefallen ist, ist

a) deine variable StartTime nicht initialisiert
b) arbeitest du mit zu kleinen variablen
c) wandelst du deine werte falsch um.

denk dran, gettickcount gibt die anzahl der verstrichenen millisekunden zurück ... <HTH>

TheMiller 3. Jan 2008 23:55

Re: Sekunden und Millisekunden anzeigen
 
Hey!

Die Variable ist initialisiert, aber nicht in dieser Prozedur, sondern in einem Button.OnClick.

Würde gerne GetTickDiff aufrufen, aber es wird bei mir nicht gefunden. In welcher Unit ist die? Achso: Und meine Hilfe funzt wieder! Danke! Doch da steht weder zu GetTickCount noch zu GetTickDiff was drin...

Danke

grenzgaenger 4. Jan 2008 00:16

Re: Sekunden und Millisekunden anzeigen
 
GetTickDiff() //IdGlobal
GetTickCount()//Windows

TheMiller 4. Jan 2008 01:05

Re: Sekunden und Millisekunden anzeigen
 
Ich habe nun folgenden Code:

Delphi-Quellcode:
Diff:=GetTickDiff(StartTime, GetTickCount());
s:=Diff div 60; //für Sekunden
Form1.Caption:=Format('%.2d', [s]);
Jetzt sehe ich ja in der Caption der Form die "Sekunden". Doch die laufen viel zu schnell und stimmen nicht mit "realen" Sekunden überein! Wieso nicht? Was mache ich falsch?

StartTime ist übrigens dann initialisiert, wenn der Timer gestartet wird und bekommt den aktuellen GetTickCount-Wert.

danke.

grenzgaenger 4. Jan 2008 01:19

Re: Sekunden und Millisekunden anzeigen
 
Zitat:

Zitat von DJ-SPM
Ich habe nun folgenden Code:

Delphi-Quellcode:
Diff:=GetTickDiff(StartTime, GetTickCount());
s:=Diff div 60; //für Sekunden
Form1.Caption:=Format('%.2d', [s]);
Jetzt sehe ich ja in der Caption der Form die "Sekunden". Doch die laufen viel zu schnell und stimmen nicht mit "realen" Sekunden überein! Wieso nicht? Was mache ich falsch?

StartTime ist übrigens dann initialisiert, wenn der Timer gestartet wird und bekommt den aktuellen GetTickCount-Wert.

danke.

Delphi-Quellcode:
Diff:=GetTickDiff(StartTime, GetTickCount());
s:=Diff div 1000; //für Sekunden <<< so wird schon eher 'n schuh draus
Form1.Caption:=Format('%.2d', [s]);
gettickcount liefert die zeit in millisekunden = 1/1000 sekunde, keine 60'tel. daher musst du hier mit 1000 dividieren.

TheMiller 4. Jan 2008 07:55

Re: Sekunden und Millisekunden anzeigen
 
Das würde natürlich einiges Erklären...

Ich probiere das dann mal aus...

Danke und bis dann!

TheMiller 4. Jan 2008 09:13

Re: Sekunden und Millisekunden anzeigen
 
So, das funzt jetzt soweit, um die Millisekunden auszurechnen, habe ich noch eine Zeile hinzugefügt und scheint auch richtig zu sein. Schaut bitte nochmal.

Aber wenn ich jetzt das Format ausgebe, dann zeigt er mir 3 Stellen an, wieso??

Delphi-Quellcode:
var
  s, ms: Word;
  Diff: Integer;
begin
  Diff:=GetTickDiff(BPMStartTime, GetTickCount());
  s:=Diff div 1000;
  ms:=Diff mod 1000;
  Form1.Caption:=Format('%.2d:%.2d', [s, ms]);
Danke für eure Hilfe

mashutu 4. Jan 2008 09:23

Re: Sekunden und Millisekunden anzeigen
 
Zitat:

Zitat von DJ-SPM
Aber wenn ich jetzt das Format ausgebe, dann zeigt er mir 3 Stellen an, wieso??

vielleicht, weil Du eine dreistellige Zahl hast?

Matze 4. Jan 2008 09:37

Re: Sekunden und Millisekunden anzeigen
 
Zitat:

Zitat von DJ-SPM
Aber wenn ich jetzt das Format ausgebe, dann zeigt er mir 3 Stellen an, wieso??

Mit der Format-Funktion gibst du in deinem Fall die maximale Anzahl von 2 Nachkommastellen an. Da du jedoch keine Nachkommastellen hast, ist dieser Teil der Format-Funktion überflüssig. Die ganzzahlige Teil einer Zahl bzw. in deinem Fall die Zahl selbst, an sich wird immer kommplatt dargestellt.
Was möchtest du denn genau erreichen?

TheMiller 4. Jan 2008 09:50

Re: Sekunden und Millisekunden anzeigen
 
Ich möchte Sekunden und Millisekunden zweistellig anzeigen lassen, also ungefähr so

15:26

Aber geteilt habe ich bei den ms richtig, oder?

DeddyH 4. Jan 2008 09:54

Re: Sekunden und Millisekunden anzeigen
 
Zitat:

Zitat von Matze
Mit der Format-Funktion gibst du in deinem Fall die maximale Anzahl von 2 Nachkommastellen an. Da du jedoch keine Nachkommastellen hast, ist dieser Teil der Format-Funktion überflüssig. Die ganzzahlige Teil einer Zahl bzw. in deinem Fall die Zahl selbst, an sich wird immer kommplatt dargestellt.

Stimmt nicht ganz ;) .
Zitat:

Zitat von OH
d d
Dezimal. Das Argument muß ein Integerwert sein. Der Wert wird in einen String umgewandelt, der aus Dezimalzahlen besteht. Wenn der Format-String einen Bezeichner für die Genauigkeit enthält, muß der resultierende String mindestens die angegebene Anzahl von Stellen aufweisen. Enthält er weniger Stellen, wird der String auf der linken Seite mit Nullen aufgefüllt.


Matze 4. Jan 2008 10:00

Re: Sekunden und Millisekunden anzeigen
 
Und was habe ich da nun falsch gesagt?

Wenn ich angebe, eine 3-stellige Zahl soll mit 5 Stellen dargestellt werden, dann werden 2 Nullen vor die Zahl gesetzt. Ich meinte jedoch, er kann bei einer 3-stelligen Zahl nicht die letzte Ziffer abschneiden. Oder geht das doch?

@DJ: Ja deine Rechnung müsste stimmen. Millisekunden können von 0-999 gehen.

DeddyH 4. Jan 2008 10:04

Re: Sekunden und Millisekunden anzeigen
 
Sry, ich hatte Dich so verstanden, dass die Angabe einer Precision bei ganzen Zahlen überflüssig sei.

Matze 4. Jan 2008 10:10

Re: Sekunden und Millisekunden anzeigen
 
Ich bezog mich auf die der Nachkommastellen. Evtl. habe ich mich missverständlich ausgedrückt. ;)

@DJ: Du kannst die Millisekunden natürlich so abschneiden:

Delphi-Quellcode:
// Digit: 10, 100, 1000, ...
function CutIntTo(Number: Integer; Digit: Byte): Integer;
begin
  Result := Number div Digit;
end;
Aufruf:

Delphi-Quellcode:
Format('%d:%d', [s, CutIntTo(ms, 10)]);
Ich hoffe, ich habe nun keinen Denkfehler eingebaut.

grenzgaenger 4. Jan 2008 10:12

Re: Sekunden und Millisekunden anzeigen
 
Zitat:

Zitat von DJ-SPM
Ich möchte Sekunden und Millisekunden zweistellig anzeigen lassen, also ungefähr so

15:26

Aber geteilt habe ich bei den ms richtig, oder?

normal nicht richtig geteilt. das format ist im allgemeinen HH:MM:SS.ms also stunden, minuten, sekunden zweistellig, mit 'n D-Punkt getrennt. die millisekunden werden an die sekunden drangehängt und mit einem punkt getrennt. dabei ist mir keine feste stellenzahl der millisekunden bekannt. entweder direkt anschliessen oder auf 3 stellen formatieren. <HTH>

mashutu 4. Jan 2008 18:37

Re: Sekunden und Millisekunden anzeigen
 
Zitat:

Zitat von DJ-SPM
Ich möchte Sekunden und Millisekunden zweistellig anzeigen lassen, also ungefähr so

15:26

Aber geteilt habe ich bei den ms richtig, oder?

Ob du richtig geteilt hast weiss ich nicht, weil ich nicht weiss um welche Uhrzeit das Programm lief :-)
[/scherz]

Warum machst Du auf die Millisekunden keinen DIV 10?
Dann isses zweistellig.
Delphi-Quellcode:
Format('%d:%d', [s, ms div 10]);

Matze 4. Jan 2008 18:44

Re: Sekunden und Millisekunden anzeigen
 
Zitat:

Zitat von mashutu
Warum machst Du auf die Millisekunden keinen DIV 10?
Dann isses zweistellig.
Delphi-Quellcode:
Format('%d:%d', [s, ms div 10]);

Siehe mal, was hier steht und rate mal, was die Funktion macht. ;)

TheMiller 5. Jan 2008 17:09

Re: Sekunden und Millisekunden anzeigen
 
Danke an alle, die mir geholfen haben. Mit euren Vorschlägen funzt es jetzt!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:36 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