![]() |
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:
Habe es bereits mit den Delphi-Funktionen getTime und DateToStr(now) versucht.
StopTime.start;
try Proceudre TuIrgendWas finally ShowMessage(StopTime.Stop) end; 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 |
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.
|
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; |
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; |
Re: Ausgabe der Zeit (in ms) welche eine Procedur benötigt
Zitat:
Delphi-Quellcode:
Kommt allerdings erst zu tragen, wenn das System fuer knapp 50 Tage laeuft und die Kapazitaet von nem DWord ausgereizt ist ;)
if endZeit > startZeit then
endZeit := endZeit - startZeit else endZeit := (high(cardinal) - startZeit) + endZeit; greetz Mike |
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 |
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 ![]() Evtl. wäre ![]() ![]() Übrigens: Für das Überlaufproblem nach ~50 Tagen gibt es natürlich eine Lösung: ![]() Gruß xaromz |
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 ;)
|
Re: Ausgabe der Zeit (in ms) welche eine Procedur benötigt
Hallo,
Zitat:
Zitat:
Gruß xaromz |
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:
so ist das richtiger.
if endZeit > startZeit then endZeit:= endZeit - STARTZEIT
|
Re: Ausgabe der Zeit (in ms) welche eine Procedur benötigt
Selbst wenn Windows schon über 49,7 Tage gelaufen ist, oder erst wärenddessen den prung über diese Grenze macht, so bekommt man bei der Division dennoch die Riochtige Diverenz raus, solange der Messzeitraum nicht selber länger dauert.
1000-900=100 50-4294967246=100 Man darf nur nicht mit Fließkommawerten, oder In64 rechnen ... innerhalb von LongWord/Cardinal gibt es dann wärend der Berechnung wieder einen Überlauf, welcher den vorherigen behebt :zwinker: |
Re: Ausgabe der Zeit (in ms) welche eine Procedur benötigt
Nun ja, so viel zur geplanten Laufzeit und deren Folgen, wenn die nicht beachtet wird:
Zitat:
|
Re: Ausgabe der Zeit (in ms) welche eine Procedur benötigt
Zum Glück arbeitet hier keiner mit TDateTime/TTime (doppelte Genauigkeit), sondern mit 'nem netten vorzeichenlosen Integer (ohne Genauigkeitsprobleme) :angel:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz