![]() |
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:
Als Ergebnis kommt immer 0 raus...
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; Gibt es eine bessere Möglichkeit sowas zu berechnen als mit GetTickCount??? |
Re: QuickSort zu schnell für GetTickCount?
Jepp, genauer als GetTickCount ist QueryPerformanceCounter(). Such mal hier im Forum oder alternativ im Msdn danach.
|
Re: QuickSort zu schnell für GetTickCount?
Zitat:
|
Re: QuickSort zu schnell für GetTickCount?
Schau Dir doch das
![]() |
Re: QuickSort zu schnell für GetTickCount?
Delphi-Quellcode:
Ü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: )
var
Start, Ende: Int64; begin QueryPerformanceCounter(Start); Funktion(); QueryPerformanceCounter(Ende); ShowMessage(IntToStr(Ende - Start)); end; |
Re: QuickSort zu schnell für GetTickCount?
Zitat:
Nun funktioniert es auch :-D Danke für die schnellen Antworten :dp: |
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... |
Re: QuickSort zu schnell für GetTickCount?
Den
![]() |
Re: QuickSort zu schnell für GetTickCount?
Zitat:
Ok, DANKE!^^ |
Re: QuickSort zu schnell für GetTickCount?
Irgendetwas scheint aber immernoch nicht zu stimmen....
Ist denn jetzt noch was falsch???
Delphi-Quellcode:
Ausgabe hat nun etwa den Wert 3973945 Sekunden bei mir :shock:
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; |
Re: QuickSort zu schnell für GetTickCount?
Du musst die Frequenz ermitteln und die Ausgabe durch die Frequenz teilen. Was Du jetzt hast, ist die Frequenz.
[edit]Beispiel:
Delphi-Quellcode:
[/edit]
procedure TForm1.Button1Click(Sender: TObject);
var Start, Stopp, Freq: int64; begin QueryPerformanceCounter(Start); sleep(1234); QueryPerformanceCounter(Stopp); QueryPerformanceFrequency(Freq); ShowMessage(Format('Das waren %.2f Sekunden.',[(Stopp - Start) / Freq])); end; |
Re: QuickSort zu schnell für GetTickCount?
Du musst die Differenz durch die Frequenz teilen (irgendwie logisch, denn je höher die Frequenz desto niedriger die Sekundenzahl bei gleicher Differenz :wink: ). Hier mal ein Beispiel für Sekunden, Milli-, Mikro- und Nanosekunden:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Start, Ende, F, Diff: Int64; begin QueryPerformanceFrequency(F); QueryPerformanceCounter(Start); Funktion(); QueryPerformanceCounter(Ende); Diff := Ende - Start; Label1.Caption := Format('%d Sekunden' + #13#10 + '%d Millisekunden' + #13#10 + '%d Mikrosekunden' + #13#10 + '%d Nanosekunden', [Diff div F, Diff * 1000 div F, Diff * 1000000 div F, Diff * 1000000000 div F]); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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