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 QuickSort zu schnell für GetTickCount? (https://www.delphipraxis.net/124801-quicksort-zu-schnell-fuer-gettickcount.html)

Forlan 25. Nov 2008 14:36


QuickSort zu schnell für GetTickCount?
 
Hallo zusammen...

Kann es sein das QuickSort so schnell ist das GetTickCount die geschwindigkeit nicht mehr berechnen kann?
Hier mal der Quellcode dazu...

Delphi-Quellcode:
procedure THauptprogramm.bQuickSortClick(Sender: TObject);
var i,start,stop,Ausgabe : integer;
begin
  start := GetTickCount;
    QuickSort(Feld,Low(Feld),High(Feld));
  stop := GetTickCount;
  Ausgabe := Stop-Start;

  for i := low(Feld) to high(Feld) do
    begin
      sgToSort.Cells[i,0] := IntToStr(Feld[i]);
    end;

  if cbBerechnung.Checked = True
  then MessageDlg('QuickSort benötigte: '+IntToStr(Ausgabe)+'ms',mtInformation,[mbOk],0)
  else MessageDlg('Es wurde sortiert!',mtInformation,[mbOk],0);
end;
Als Ergebnis kommt immer 0 raus...
Gibt es eine bessere Möglichkeit sowas zu berechnen als mit GetTickCount???

Fussball-Robby 25. Nov 2008 14:39

Re: QuickSort zu schnell für GetTickCount?
 
Jepp, genauer als GetTickCount ist QueryPerformanceCounter(). Such mal hier im Forum oder alternativ im Msdn danach.

Forlan 25. Nov 2008 14:43

Re: QuickSort zu schnell für GetTickCount?
 
Zitat:

Zitat von Fussball-Robby
Jepp, genauer als GetTickCount ist QueryPerformanceCounter(). Such mal hier im Forum oder alternativ im Msdn danach.

Ok, und wie benutzt man QueryPerformanceCounter()? Es ist klar das nach einem Int64 die Suche ist, aber welche Variable muss ich dort einsetzen?

DeddyH 25. Nov 2008 14:49

Re: QuickSort zu schnell für GetTickCount?
 
Schau Dir doch das Beispiel mal an, ist zwar VB.NET, aber das dürfte ja kein großes Hindernis sein.

Fussball-Robby 25. Nov 2008 14:49

Re: QuickSort zu schnell für GetTickCount?
 
Delphi-Quellcode:
var
  Start, Ende: Int64;
begin
  QueryPerformanceCounter(Start);
  Funktion();
  QueryPerformanceCounter(Ende);
  ShowMessage(IntToStr(Ende - Start));
end;
Übrigens: Wenn du unbedingt die benötigte Zeit (also zum Beispiel Millisekunden) ermitteln willst, musst du noch mit QueryPerformanceFrequency arbeiten, denn diese Frequenz hängt vom Prozessor ab und ist von daher nicht an jedem PC gleich (hoffentlich hab ich da jetzt nichts falsches gesagt, weiß es nicht mehr ganz genau :cyclops: )

Forlan 25. Nov 2008 14:50

Re: QuickSort zu schnell für GetTickCount?
 
Zitat:

Zitat von DeddyH
Schau Dir doch das Beispiel mal an, ist zwar VB.NET, aber das dürfte ja kein großes Hindernis sein.

Alles klar, danke für den Link...
Nun funktioniert es auch :-D

Danke für die schnellen Antworten :dp:

Forlan 25. Nov 2008 14:54

Re: QuickSort zu schnell für GetTickCount?
 
Eine Frage dazu noch...

Welche Einheit gibt QueryPerformanceCounter() denn zurück?

Also bei mir kam dann als Ergebnis 24 raus...

DeddyH 25. Nov 2008 14:57

Re: QuickSort zu schnell für GetTickCount?
 
Den Post von Robby hast Du gelesen?

Forlan 25. Nov 2008 15:00

Re: QuickSort zu schnell für GetTickCount?
 
Zitat:

Zitat von DeddyH
Den Post von Robby hast Du gelesen?

Pardon, nein den hab ich übersehen... :pale:

Ok, DANKE!^^

Forlan 25. Nov 2008 15:08

Re: QuickSort zu schnell für GetTickCount?
 
Irgendetwas scheint aber immernoch nicht zu stimmen....
Ist denn jetzt noch was falsch???

Delphi-Quellcode:
procedure THauptprogramm.bQuickSortClick(Sender: TObject);
var i : integer;
    start,stop,Ausgabe : Int64;
begin
  QueryPerformanceCounter(Start); {GetTickCount ist nicht möglich, da QuickSort zu schnell ist}
    QuickSort(Feld,Low(Feld),High(Feld));
  QueryPerformanceCounter(Stop);
  Ausgabe := (Stop-Start);
  QueryPerformanceFrequency(Ausgabe);

  for i := low(Feld) to high(Feld) do
    begin
      sgToSort.Cells[i,0] := IntToStr(Feld[i]);
    end;

  if cbBerechnung.Checked = True
  then MessageDlg('QuickSort benötigte: '+IntToStr(Ausgabe)+' Sekunden',mtInformation,[mbOk],0)
  else MessageDlg('Es wurde sortiert!',mtInformation,[mbOk],0);
end;
Ausgabe hat nun etwa den Wert 3973945 Sekunden bei mir :shock:


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