AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

JCLCounter - High Performance Counter

Ein Thema von creality · begonnen am 14. Jun 2007 · letzter Beitrag vom 13. Jul 2007
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von creality
creality

Registriert seit: 14. Mai 2007
Ort: Double D Town
39 Beiträge
 
Delphi 2007 Professional
 
#1

JCLCounter - High Performance Counter

  Alt 14. Jun 2007, 14:03
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

  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.198 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: JCLCounter - High Performance Counter

  Alt 14. Jun 2007, 14:06
Zitat von creality:
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.
(Vor)Gestern sind doch Windows-Updates eingetrutelt ...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
fLaSh11
(Gast)

n/a Beiträge
 
#3

Re: JCLCounter - High Performance Counter

  Alt 14. Jun 2007, 14:13
zu faul um ne zeitmessung selber zu amchen?
Ist doch viel einfacher als irgendeine Kompo zu nutzen...

Delphi-Quellcode:
var
  freq,time1,time2: int64;
begin
  QueryPerformanceFrequency(freq);
  QueryPerformanceCounter(time1);

  //Do Something

  QueryPerformanceCounter(time2);

  ShowMessage(FloatToStr((time2-time1)/freq));
Man sollte die Zeit dann evtl runden, weil ja durch den Gleitkommawert das ergebnis verfälsch wird...
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: JCLCounter - High Performance Counter

  Alt 14. Jun 2007, 14:23
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: JCLCounter - High Performance Counter

  Alt 14. Jun 2007, 14:32
Zitat von fLaSh11:
zu faul um ne zeitmessung selber zu amchen? Ist doch viel einfacher als irgendeine Kompo zu nutzen...
Na ja, die Klassen aus der JCL haben schon ihre Berechtigung.
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:
  // hier der entscheidende Ausschnitt aus dem Sourcecode
  if not QueryPerformanceFrequency(FFrequency) then
    // 'No high performance counters supported'
    raise EJclCounterError.CreateRes(@RsNoCounter);
Die MSDE sagt:
Zitat:
If the function fails, the return value is zero. To get extended error information, call GetLastError. For example, if the installed hardware does not support a high-resolution performance counter, the function fails.
Also, was sagt GetLastError ?
Andreas
  Mit Zitat antworten Zitat
fLaSh11
(Gast)

n/a Beiträge
 
#6

Re: JCLCounter - High Performance Counter

  Alt 14. Jun 2007, 14:36
Zitat von shmia:
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 !!
zu 2. und 3. kann man mit dem QueryPerformanceCounter genauso
zu 4. sollte nur ein kurzes unvollständiges Beispiel sein... natüröich kann ich noch dies und das prüfen und verbessern
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: JCLCounter - High Performance Counter

  Alt 14. Jun 2007, 15:00
Zitat von fLaSh11:
Zitat von shmia:
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 !!
zu 2. und 3. kann man mit dem QueryPerformanceCounter genauso
zu 4. sollte nur ein kurzes unvollständiges Beispiel sein... natüröich kann ich noch dies und das prüfen und verbessern
Du hast den Vorteil von Objektorientierter Programmierung noch nicht vollständig verstanden.
Angenommen, du möchtest 10 verschiedene Zeiten messen. Ohne Kapselung in einer Klasse artet das doch in ein Gemetzel aus.
Delphi-Quellcode:
var
  freq,time1Start,time1Stop,time2Start,time2Stop, time3Start,time3Stop, ...... : int64;
Jetzt könnte man natürlich einen Record für die Start und Stopzeit bauen und ein Array nutzen:
Delphi-Quellcode:
type
   TTimeRec = record
     start, stop : Int64;
   end;
var
   freq : int64;
   zeitliste : array[1..10] of TTimeRec;
Der halbe Weg zur Klasse ist schon getan.
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]);
Andreas
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#8

Re: JCLCounter - High Performance Counter

  Alt 14. Jun 2007, 15:02
creality, kannst du mal ein simples Testprogramm ausprobieren und das Ergebnis hier posten?
Angehängte Dateien
Dateityp: zip project1_158.zip (6,3 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von creality
creality

Registriert seit: 14. Mai 2007
Ort: Double D Town
39 Beiträge
 
Delphi 2007 Professional
 
#9

Re: JCLCounter - High Performance Counter

  Alt 14. Jun 2007, 15:08
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

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"
  Mit Zitat antworten Zitat
Benutzerbild von creality
creality

Registriert seit: 14. Mai 2007
Ort: Double D Town
39 Beiträge
 
Delphi 2007 Professional
 
#10

Re: JCLCounter - High Performance Counter

  Alt 14. Jun 2007, 15:11
@ Robert: Getestet

Freq := 0;
if not QueryPerformanceFrequency(Freq) then

wird übersprungen...also keine Ausgabe.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 17:56 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