Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ausgabe der Zeit (in ms) welche eine Procedur benötigt (https://www.delphipraxis.net/76993-ausgabe-der-zeit-ms-welche-eine-procedur-benoetigt.html)

eagle1985 13. Sep 2006 09:56


Ausgabe der Zeit (in ms) welche eine Procedur benötigt
 
Hallo zusammen,

ich benötige eine Funktion welche es ermöglicht anzuzeigen wie lange eine Procedure/Funktion läuft.

habe mir so etwas vorgestellt:
Code:
StopTime.start;
try
  Proceudre TuIrgendWas
finally
  ShowMessage(StopTime.Stop)
end;
Habe es bereits mit den Delphi-Funktionen getTime und DateToStr(now) versucht.
Hatte leider keinen erfolg, da anscheinend nur die Uhrzeit auf Sekunden ebene ausgegeben wird.

Hat jemand eine andere Idee wie dies zu bewerkstellen ist.
Kann man in Delphi Timestamps machen wie in Unix oder SQL welche in ms arbeiten?
Dan bräuchte ich die beiden TimeStamps nur von einander zu Subtrahieren und hätte die Zeit in ms

greez eagle

runner 13. Sep 2006 10:04

Re: Ausgabe der Zeit (in ms) welche eine Procedur benötigt
 
Probier doch mal die Funktion GetTickCount. Die Liefert die die Zeit seit Systemstart im 1/1000 sec.

hsg 13. Sep 2006 10:05

Re: Ausgabe der Zeit (in ms) welche eine Procedur benötigt
 
Die Funktion GetTickCount() aus dem Win-API hilft dir dabei:
Delphi-Quellcode:
procedure Test();
var
  start : Cardinal;
  dauer : Cardinal;
begin
  start := GetTickCount();
  // Mach was langes
  dauer := GetTickCount() - start;
end;

Vjay 13. Sep 2006 10:06

Re: Ausgabe der Zeit (in ms) welche eine Procedur benötigt
 
Schau mal in die Hilfe zu "getTickCount", aber achtung dies ist nicht die benötigte Prozessorzeit, sondern dann die reale Zeit.

also, da ich gerade gute Laune habe:

Delphi-Quellcode:
var
 startZeit, endZeit: cardinal;
begin
 startZeit:= getTickCount;

// hier mach, was du machen musst

 
 endZeit:= getTickCount;
 if endZeit > startZeit then endZeit:= endZeit -getTickCount
 else endZeit:= 0; // kann selten vorkommen, grund siehe windows-hilfe
end;

JasonDX 13. Sep 2006 10:17

Re: Ausgabe der Zeit (in ms) welche eine Procedur benötigt
 
Zitat:

Zitat von Vjay
Delphi-Quellcode:
if endZeit > startZeit then endZeit:= endZeit -getTickCount
else endZeit:= 0; // kann selten vorkommen, grund siehe windows-hilfe

Na ja, wenn wir schon ruecksicht darauf nehmen, dann auch richtig ;)
Delphi-Quellcode:
if endZeit > startZeit then
  endZeit := endZeit - startZeit
else
  endZeit := (high(cardinal) - startZeit) + endZeit;
Kommt allerdings erst zu tragen, wenn das System fuer knapp 50 Tage laeuft und die Kapazitaet von nem DWord ausgereizt ist ;)

greetz
Mike

eagle1985 13. Sep 2006 10:17

Re: Ausgabe der Zeit (in ms) welche eine Procedur benötigt
 
danke für die Hinweise auf getTickCount, hab gar nicht gewusst dass es diese Funktion gibt.
Damit kann ich mein Problem lössen.

THX

xaromz 13. Sep 2006 10:26

Re: Ausgabe der Zeit (in ms) welche eine Procedur benötigt
 
Hallo,

vielleicht noch ein Hinweis: GetTickCount ist nicht so hochauflösend, wie das Ergebnis glauben macht, da die Auflösung vom Systemtimer abhängig ist. Dieser arbeitet aber meist mit weit geringerer Auflösung als 1 ms. Mit MSDN-Library durchsuchenGetSystemTimeAdjustment lässt sich dieser Wert herausfinden.
Evtl. wäre MSDN-Library durchsuchenQueryPerformanceCounter zusammen mit MSDN-Library durchsuchenQueryPerformanceFrequency besser. Die erreichte Auflösung geht ja nach PC bis zur Prozessorfrequenz.

Übrigens: Für das Überlaufproblem nach ~50 Tagen gibt es natürlich eine Lösung: MSDN-Library durchsuchenGetTickCount64!

Gruß
xaromz

himitsu 13. Sep 2006 10:44

Re: Ausgabe der Zeit (in ms) welche eine Procedur benötigt
 
49,7 :angel2: , obwohl meistens die Programmteile nicht solange laufen, vorallem nicht wenn jemand die Zeit in ms benötigt ;)

xaromz 13. Sep 2006 10:51

Re: Ausgabe der Zeit (in ms) welche eine Procedur benötigt
 
Hallo,
Zitat:

Zitat von himitsu
49,7 :angel2: ,

Klugscheisser :mrgreen: .
Zitat:

Zitat von himitsu
obwohl meistens die Programmteile nicht solange laufen, vorallem nicht wenn jemand die Zeit in ms benötigt ;)

Das Problem ist ja nicht, dass ein Programmteil so lange läuft, sondern, dass das System genau zwischen dem ersten und dem zweiten Messpunkt 49,7 Tage gelaufen ist. Dann ist der erste Wert z. B. 4 Mrd, und der zweite 10.

Gruß
xaromz

Vjay 13. Sep 2006 11:02

Re: Ausgabe der Zeit (in ms) welche eine Procedur benötigt
 
Jop, aber bevor man in 50 Tagen den Fehler sucht, ne ;)

Übrigens habe ich ja totalen Humbug geschrieben:

Delphi-Quellcode:
if endZeit > startZeit then endZeit:= endZeit - STARTZEIT
so ist das richtiger.


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