![]() |
Laufzeit einer Prozedur/Funktion
Ich würde gerne eine Prozedur schreiben zum Messen der Laufzeit einer belibigen Prozedur oder Funktion. Beim Aufruf der Prozedur soll dann die Prozedur/Funktion übergeben werden. So hatte ich angefangen, das funktioniert aber noch nicht:
Delphi-Quellcode:
program zeit;
type proc = procedure; procedure beispiel; begin // mache irgendwas end; procedure laufzeit(p: proc); begin // messe laufzeit p; // messe laufzeit // gib laufzeit aus end; begin laufzeit(beispiel); end. |
Re: Laufzeit einer Prozedur/Funktion
woran genau scheiterst du? An der Ausgabe der Zeit?
|
Re: Laufzeit einer Prozedur/Funktion
Der Prozedur Laufzeit muss doch eine Variable übergeben werden (die Funktion/Prozedur). Wenn ich den proc so definiere wie oben, bekomme ich beim Aufruf mit einer Prozedur mit zwei Parametern den Fehler: Incompatible type for arg no. 1: Got "untyped", expected "<procedure variable type of procedue;Register>".
|
Re: Laufzeit einer Prozedur/Funktion
Nun ja, wie macht man es denn im richtigen Leben, wenn man keine Stoppuhr hat? Man merkt sich die Anfangs- und Endzeit und zieht dann von der Endzeit die Anfangszeit ab:
Delphi-Quellcode:
Da GetTickCount die Zeit in Millisekunden angibt, hast du danach die Laufzeit in Millisekunden.
start := GetTickCoint;
// tu was end := GetTickCount; zeit := end - start; Allerdings ist zu beachten, dass Windows ein Multitaskbetriebssystem ist und dieser Wert ein sehr grober Wert ist, da die CPU zwischenzeitlich auch Code in anderen Threads anderer Prozesse ausführt. Willst du es genauer musst du mit ![]() |
Re: Laufzeit einer Prozedur/Funktion
Falls Du ein paar € ausgeben kannst: Es gibt mit
![]() |
Re: Laufzeit einer Prozedur/Funktion
getTickCount zur messung der Laufzeit kenne ich. Ich würde nur erne eine Prozedur schreiben, der ich eine beliebige andere Prozedur übergeben kann um somit die Laufzeit zu messen.
|
Re: Laufzeit einer Prozedur/Funktion
Eine beliebige andere Prozedur/Funktion wird nicht gehen, denn Du musst ihr ja Parameter übergeben. Deine Idee funktioniert für parameterlose Routinen. Für andere musst du eben einen anderen Prozedurtypen deklarieren. Ich glaube, Du denkst Dir so etwas:
Delphi-Quellcode:
Das geht so zwar nicht, aber wenn Du die zu testende Routine in eine eigene parameterlose Prozedur packst, und dann deine Laufzeitmessung mit dieser Prozedur aufrufst, geht das schon. Na ja, irgendwie jedenfalls.
Procedure LaufzeitMessen (Proc : TProzedurMitBeliebigenParametern);
Begin // Messen End; ... Laufzeitmessen(EineProzedur(a,b,c,d,e));
Delphi-Quellcode:
Procedure Laufzeitmessen (Proc : TProcedure);
Begin /Messen End; Procedure TestProc; Var a,b : Integer; c,d,e : String; // Zum Beispiel; Begin a := 1; b := 2; ... // Parameter setzen oder einmalig global EineProzedur(a,b,c,d,e); End; ... Laufzeitmessen (TestProc); |
Re: Laufzeit einer Prozedur/Funktion
schade, dann geht das wohl nicht so wie ich es mir vorgestellt hatte. dann werde ich das doch gleich mit in die prozedur einbauen, ist wohl am einfachsten.
|
Re: Laufzeit einer Prozedur/Funktion
Denk dran, das GetTickCount nur auf ein paar MS genau ist. Die Ungenauigkeit potentiert sich, wenn du viele kurze Einzelmessungen addierst. Ich glaube, GetTickCount geht auf 18ms genau, Du solltest also mindestens 1-2 Sekunden messen, um eine 1%-Genauigkeit zu bekommen. Du kannst auch mit dem PerformanceCounter von Windows arbeiten
|
Re: Laufzeit einer Prozedur/Funktion
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 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-2025 by Thomas Breitkreuz