![]() |
JCLCounter - High Performance Counter
Hallo Forum,
ich verwende seit einiger zeit (6Monate) den JCLCounter aus der JCL Lib. Damit versuche ich genaue Zeitmessungen durchzuführen. Ging immer...bis gestern. Seit gestern kann ich kein einziges Tool mehr starten ohne das die Exception ausgelöst wird: No high performance counters supported. Das würde bedeuten, das meine CPU sowas nicht unterstützt. Sinnlos...weil es über n halbes Jahr ging. Weiß jemand woran das liegen könnte? mfg, Marko :coder: |
Re: JCLCounter - High Performance Counter
Zitat:
|
Re: JCLCounter - High Performance Counter
zu faul um ne zeitmessung selber zu amchen? :-D
Ist doch viel einfacher als irgendeine Kompo zu nutzen...
Delphi-Quellcode:
Man sollte die Zeit dann evtl runden, weil ja durch den Gleitkommawert das ergebnis verfälsch wird...
var
freq,time1,time2: int64; begin QueryPerformanceFrequency(freq); QueryPerformanceCounter(time1); //Do Something QueryPerformanceCounter(time2); ShowMessage(FloatToStr((time2-time1)/freq)); |
Re: JCLCounter - High Performance Counter
Nuetzt aber wahrscheinlich nichts, wenn QueryPerformanceFrequency 0 zurueckliefert.
Pruef mal nach was diese Funktion zurueckliefert. Wenn wirklich 0 zurueckkommt, dann hat das Windows Update einen Fehler eingeschleppt. |
Re: JCLCounter - High Performance Counter
Zitat:
1. kann der Zeitoverhead für den Funktionsaufruf herausgerechnet werden 2. kann man mehr als nur eine Zeitmessung vornehmen. Ohne Kapselung in eine Klasse verliert man völlig den Überblick. 3. man kann die Zeit anhalten und die abgelaufene Zeit erst viel später anzeigen 4. dein code-Schnippsel prüft den Returnwert von QueryPerformanceFrequency nicht !! Aber egal, auch TJclCounter benützt QueryPerformanceCounter/Frequency.
Delphi-Quellcode:
Die MSDE sagt:
// hier der entscheidende Ausschnitt aus dem Sourcecode
if not QueryPerformanceFrequency(FFrequency) then // 'No high performance counters supported' raise EJclCounterError.CreateRes(@RsNoCounter); Zitat:
|
Re: JCLCounter - High Performance Counter
Zitat:
zu 4. sollte nur ein kurzes unvollständiges Beispiel sein... natüröich kann ich noch dies und das prüfen und verbessern |
Re: JCLCounter - High Performance Counter
Zitat:
Angenommen, du möchtest 10 verschiedene Zeiten messen. Ohne Kapselung in einer Klasse artet das doch in ein Gemetzel aus.
Delphi-Quellcode:
Jetzt könnte man natürlich einen Record für die Start und Stopzeit bauen und ein Array nutzen:
var
freq,time1Start,time1Stop,time2Start,time2Stop, time3Start,time3Stop, ...... : int64;
Delphi-Quellcode:
Der halbe Weg zur Klasse ist schon getan.
type
TTimeRec = record start, stop : Int64; end; var freq : int64; zeitliste : array[1..10] of TTimeRec;
Delphi-Quellcode:
// die objekt-orientierte Variante
// kein "herumgerechne", kein Aufruf von Low-Level-Funktionen // einfach, sauber & klar var zeitliste : array[1..10] of TJclCounter; begin zeitliste[1].Start; ... zeitlist[1].Stop; ... ShowMessageFmt('Zeit 1: %f',[zeitlist[1].ElapsedTime]); |
Re: JCLCounter - High Performance Counter
Liste der Anhänge anzeigen (Anzahl: 1)
creality, kannst du mal ein simples Testprogramm ausprobieren und das Ergebnis hier posten?
|
Re: JCLCounter - High Performance Counter
So ich mal wieder:
QueryPerformanceFrequency liefert komischerweise nicht 0 zurück. Und zu faul bin ich auch nich ne Zeitmessung selber zu schreiben...vielleicht schreib ich ja gleich noch den TCPIP Stack neu wenn ich grad dabei bin :thumb: Ich hab aber den JCP in vielen meiner Tools verwendet und müsste ihn wieder rausnehmen wenn ich Ursache nicht finde...
Delphi-Quellcode:
procedure TForm1.button_3Click(Sender: TObject); var freq,time1,time2: int64; i,a : Integer; begin QueryPerformanceFrequency(freq); QueryPerformanceCounter(time1); for I := 0 to 10000000 do Inc(a); QueryPerformanceCounter(time2); ShowMessage(FloatToStr((time2-time1)/freq)); end; "Message = 0,0102" |
Re: JCLCounter - High Performance Counter
@ Robert: Getestet
Freq := 0; if not QueryPerformanceFrequency(Freq) then wird übersprungen...also keine Ausgabe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:36 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