AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Bestimmung der Dauer einer Function/Prozedur
Thema durchsuchen
Ansicht
Themen-Optionen

Bestimmung der Dauer einer Function/Prozedur

Ein Thema von n1d3c · begonnen am 26. Jun 2004 · letzter Beitrag vom 30. Jun 2005
Antwort Antwort
Seite 1 von 2  1 2      
n1d3c

Registriert seit: 26. Jun 2004
4 Beiträge
 
#1

Bestimmung der Dauer einer Function/Prozedur

  Alt 26. Jun 2004, 08:20
Hi erstmal, ich bin neu in diesem Forum und ich hoffe einer kann meine kleine Frage beantworten =)

Ich möchte messen wielange bestimmte Prozeduren brauchen. Gibt es in Delphi eine Möglichkeit ( eine Komponente ) die man in eine Prozedur einbauen kann und die mir automatisch mitteilt wielange diese Prozedur lief ( auf milisekunden genau )?

Ausserdem habe ich oft das Problem das bei großen Berechnungen der Rechner nicht mehr reagiert bis die Prozedur ausgeführt worden ist, weiss hier einer Rat um das zu verhindern?
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: Bestimmung der Dauer einer Function/Prozedur

  Alt 26. Jun 2004, 08:32
Hi,

Zitat:
Ich möchte messen wielange bestimmte Prozeduren brauchen. Gibt es in Delphi eine Möglichkeit ( eine Komponente ) die man in eine Prozedur einbauen kann und die mir automatisch mitteilt wielange diese Prozedur lief ( auf milisekunden genau )?
Stichwort: Hier im Forum suchenQueryPerformanceCounter

Zitat:
Ausserdem habe ich oft das Problem das bei großen Berechnungen der Rechner nicht mehr reagiert bis die Prozedur ausgeführt worden ist, weiss hier einer Rat um das zu verhindern?
Ablösung schafft da Hier im Forum suchenApplication.Processmessages
(Evtl. in Kombination mit Sleep() o.ä. Lies dir mal frühere Threads dazu durch)
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Bestimmung der Dauer einer Function/Prozedur

  Alt 26. Jun 2004, 08:32
Schau dir dazu am besten "QueryPerformanceCounter()" und "QueryPerformanceFrequency()" an. Mit diesen funktionen kann man den meisten fällen die zeit mehr als genau bestimmen

[Edit]Wie so oft zu langsam gewesen [/Edit]
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
bernd2000

Registriert seit: 12. Jan 2004
Ort: Linz-Steyr (A)
43 Beiträge
 
Delphi 7 Professional
 
#4

Re: Bestimmung der Dauer einer Function/Prozedur

  Alt 26. Jun 2004, 08:40
Hi

Am besten mit QueryPerformanceCounter:

Code:
procedure DoStart;
var
  c,n1,n2: TLargeInteger;
  i: Integer;
begin
  QueryPerformanceFrequency(c);
  QueryPerformanceCounter(n1);
  for i:=1 to 100000 do
     begin
     //Irgendwas
     end;
  QueryPerformanceCounter(n2);
  ShowMessage(Format('Dauer: %g',[(n2-n1) / c]));
end;
Gruß Bernd
  Mit Zitat antworten Zitat
n1d3c

Registriert seit: 26. Jun 2004
4 Beiträge
 
#5

Re: Bestimmung der Dauer einer Function/Prozedur

  Alt 26. Jun 2004, 09:04
Danke für die schnelle Hilfe, funzt bestens
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Bestimmung der Dauer einer Function/Prozedur

  Alt 26. Jun 2004, 11:13
Man könnte dies ja auch mit GetTickCount machen, aber QueryPerformanceCounter ist sicher genauer, empfielt es sicher eventuell auch QueryPerformanceCounter beispielsweise zum messen von Sortier-Verfahren zu verwenden ?
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
bernd2000

Registriert seit: 12. Jan 2004
Ort: Linz-Steyr (A)
43 Beiträge
 
Delphi 7 Professional
 
#7

Re: Bestimmung der Dauer einer Function/Prozedur

  Alt 26. Jun 2004, 11:26
Hallo MrKnogge

GetTickCount ist viel zu ungenau, da der Counter nur alle 10ms(>WinNT 3.5) abgefragt wird.
Das beste das ich kenne ist QueryPerformanceCounter (Genauigkeit: 0,00083 ms)

Gruß Bernd
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#8

Re: Bestimmung der Dauer einer Function/Prozedur

  Alt 26. Jun 2004, 13:43
GetTickCount hat nur eine Auflösung von Millisekunden, der Performance Counter hat eine sehr viel höhere Frequenz. Der Performance Counter muss auf dem Board vorhanden sein (ist aber in allen Boards >5Jahre gegeben), kann aber von System zu System verschiedene Auflösungen haben (je nach verwendetem Taktgenerator), dafür gibt's ja die QueryPerformanceFrequency(). Laut SDK kann es auf Multiprozessorsystemen Probleme geben, da sollte man den laufenden Thread an einen Prozessor koppeln und dem Scheduler nicht erlauben, den Prozessor zu wechseln (SetThreadAffinityMask).

Zitat von n1d3c:
Ausserdem habe ich oft das Problem das bei großen Berechnungen der Rechner nicht mehr reagiert bis die Prozedur ausgeführt worden ist, weiss hier einer Rat um das zu verhindern?
toms' Lösung funktioniert zwar auch, die "richtige" Lösung ist aber ein [dp]"Thread"[/dp] oder [df]"Thread"[/df]
  Mit Zitat antworten Zitat
n1d3c

Registriert seit: 26. Jun 2004
4 Beiträge
 
#9

Re: Bestimmung der Dauer einer Function/Prozedur

  Alt 27. Jun 2004, 16:56
Hallo nochmal,
Danke nochmals für die schnelle und kompetente Hilfe.

Ich habe nun noch 2 weitere Fragen, wobei sich die 2te aus der ersten ergibt.
1. Frage: Mein Programm rechnet mit sehr hohen Zahlen ( int64, real reicht ab einer bestimmten anfangszahl nicht mehr aus.. [ zur Information mein Programm errechnet F(n,p,k)... Binomialverteilungen]. Das problem ist das als Ergebniss abundzu eine Zahl heraus kommt der Form: 3,2344940...(14 stellen)E32 oder E-12 [also 1,2239359345.3344E-34]. Wie kann ich diese Zahl interpretieren?
2. Frage: Eine Zahl dieser Form ergibt sich schon bei einigen Zwischenrechnungen in der Funktion. Angenommen eine Zahl dieser Form kommt bei einer Zwischenrechnung heraus und wird dann mit einer anderen Zahl multipliziert,dividiert, oder der gleichen... errechnet der Computer dabei den richtigen Wert oder kann er mit der Zahl nicht wirklich was anfangen und gibt somit ein falsches Endergebniss heraus?

Ich weiß dass diese Frage evt. für einige dumm klingen mag, aber ich bin ein Neuling und habe in meinem Delphi-Buch ( ist eben für Einsteiger ) keine passende Antwort zu dieser Frage gefunden
Ich hoffe einer von euch kann mir helfen
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Bestimmung der Dauer einer Function/Prozedur

  Alt 27. Jun 2004, 17:08
Zitat:
1,2239359345.3344E-34
Das bedeutet so viel wie 1,22... *10^-34, ist also so ziemlich genau 0.
10^-1=0,1
10^-2=0,0^1

10^-34=0,000000000000000000000000000000000000000000000 0001 (nicht nachgezählt )

zur zweiten Frage:
laut F1 geht INT64 von -2^63 bis 2^63 -1 und hat 64 Bit zur Verfügung. Also wird eine größere/kleiner Zahl ungenau angegeben. Du kannst also je nach benötigter Genauigkeit alle Folgeergebniss vergessen.

Es gibt aber Units, die auch sehr viel größere Zahlen verarbeiten können, also mal hier oder bei Google schauen.

TOX
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 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