Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dauer einer Schleife in Sek. messen? (https://www.delphipraxis.net/111422-dauer-einer-schleife-sek-messen.html)

Borschti 3. Apr 2008 09:04


Dauer einer Schleife in Sek. messen?
 
Hallo,

Ich möchte die Dauer einer Schleife in Sekunden messen, dazu speicher Ich die aktuelle Zeit vor dem Schleifeneintritt in eine Variable vom Typ TDateTime
Delphi-Quellcode:
Time1 := Time;
und nach dem die Schleife vorbei ist, wird wieder die derzeitige Zeit in einer Variable vom gleichen Typ gespeichert,
Delphi-Quellcode:
Time2 := Time;
.
Danach will ich die Differenz der beiden Zeiten mir der folgenden Funktion ermitteln:

Delphi-Quellcode:
function DateTimeDiff(date1, date2: TDateTime): string;
 var secs: integer;
     difference: real;
begin
 difference:=date2-date1;
 difference:=Frac(difference)*60;
 secs:=round(difference-Frac(difference));
 result:=IntToStr(secs)+' Sekunden';
end;
Habe mir die Funktion von Delphitreff kopiert und wenig bearbeitet weil Ich nur die Sekunden haben möchte.

Also mein Problem ist jetzt, dass mir nur Null ausgegeben wird, habe auch versucht mit sleep() die Schleife künstlich in die Länge zu ziehn aber mir wird trotzdem nur Null zurückgegeben.
Vielleicht kennt ja jemand eine bessere Funktion um die Differenz zu berechnen oder vielleicht hab ich mir auch einen Fehler in die Funktion eingebaut als Ich sie bearbeitet habe. oder man kann einfach nicht die Zeit zwischen Schleifenein- und austritt messen...

Viel zu viele mödliche Probleme :(

mfg
Alex

Sharky 3. Apr 2008 09:07

Re: Dauer einer Schleife in Sek. messen?
 
Hai Borschti,

nehme für den "Start- und Endwert" lieber Delphi-Referenz durchsuchenGetTickCount. Die Differenz sind die die ms die vergangen sind.

Tyrael Y. 3. Apr 2008 09:10

Re: Dauer einer Schleife in Sek. messen?
 
Wahrscheinlich liegt es daran, daß die Schleife weniger als eine Sekunden braucht, das führt zum Ergebnis 0.

Benutze GetTickCount.
Das ist millisekundengenau.

Am Anfang mit GetTickCount ersten Wert holen.
Nach der Schleife nochmal den Wert holen.

Zweiten Wert vom ersten abziehen und du hast deb Millisekundenunterschied.

Luckie 3. Apr 2008 09:12

Re: Dauer einer Schleife in Sek. messen?
 
MSDN-Library durchsuchenGetTickCount wäre da wohl geeigneter:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  StartTime: DWORD;
  EndTime: DWORD;
  i: Integer;
begin
  StartTime := GetTickCount;
  for i := 0 to 1000 do
    Sleep(10);
  EndTime := GetTickCount;
  ShowMessage(IntToStr((EndTime - StartTime) div 1000) + ' Sekunden');
end;

Borschti 3. Apr 2008 09:12

Re: Dauer einer Schleife in Sek. messen?
 
Danke für die schnellen Antworten, ich werds gleich mal ausprobieren :D

Borschti 3. Apr 2008 09:23

Re: Dauer einer Schleife in Sek. messen?
 
Hat auf anhieb geklappt, danke nochmal :-D

hathor 3. Apr 2008 20:09

Re: Dauer einer Schleife in Sek. messen?
 
Alles viel zu ungenau!

Guckst Du hier:

http://www.delphi-forum.de/viewtopic...ighlight=sleep

Fussball-Robby 3. Apr 2008 20:20

Re: Dauer einer Schleife in Sek. messen?
 
Zitat:

Zitat von hathor
Alles viel zu ungenau!

Guckst du QueryPerformanceCounter. Viel genauer als GetTickCount. Nachteil: Bin mir nicht sicher, aber ich glaube, das umrechnen in Sec bzw. MSec ist nicht möglich.

Mfg

Luckie 3. Apr 2008 20:31

Re: Dauer einer Schleife in Sek. messen?
 
Zitat:

Zitat von hathor
Alles viel zu ungenau!

Woher weißt du, wie genau er es braucht? Und wenn schon genau, dann wollen wir auch nur die Zeit, die der Code wirklich auf der CPU ausgeführt wird und nicht die Zeit die er auf CPU Zeit wartend verbringt. Oder was ist jetzt genau?

SirThornberry 3. Apr 2008 20:41

Re: Dauer einer Schleife in Sek. messen?
 
Zitat:

Zitat von Fussball-Robby
Zitat:

Zitat von hathor
Alles viel zu ungenau!

Guckst du QueryPerformanceCounter. Viel genauer als GetTickCount. Nachteil: Bin mir nicht sicher, aber ich glaube, das umrechnen in Sec bzw. MSec ist nicht möglich.

Mfg

Du liegst falsch. QueryPerformanceFrequency liefert dir die Auflösung für eine Sekunde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 Uhr.
Seite 1 von 2  1 2      

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