PerformanceCounter ohne Windows-Unit ?

Antworten
waran
Beiträge: 17
Registriert: Mo 25. Dez 2006, 06:59

PerformanceCounter ohne Windows-Unit ?

Beitrag von waran »

Gibt es einen Weg, den PerformanceCounter (und die Frequenz) ohne die
entsprechende WinAPI-Funktion abzufragen?

Von dem, was ich über Google rausgefunden habe, kann ich eigentlich
davon ausgehen, _dass_ es funktioniert. Scheint irgendein spezielles Register
zu sein.
Nur steht nirgendwo, wie das Register heißt, oder wie man es richtig abfragt :/

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

GetTickCount ist in der LCL alternativ deklariert in der LCLproc
also einfach die LCLProc zur uses hinzufügen und GetTickCount wie unter windows nutzen
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Na wunderbar! Die Funkiton habe ich auch schon wie wild gesucht...

waran
Beiträge: 17
Registriert: Mo 25. Dez 2006, 06:59

Beitrag von waran »

GetTickCount ist was ganz anderes.

Ich suche äquivalente für QueryPerformanceCounter(blubb: int64) und
QueryPerformanceFrequency(blubb: int64).

Theoretisch würde GetTickCount auch zur Zeitmessung taugen ... ist aber
in der Praxis nicht genau genug (und hat nicht genug Priorität).

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

also laut Microsoft ists nicht genauer aber villeicht weisst du ja mehr als die
http://support.microsoft.com/kb/172338
Function Units Resolution
---------------------------------------------------------------------------
Now, Time, Timer seconds 1 second
GetTickCount milliseconds approx. 10 ms
TimeGetTime milliseconds approx. 10 ms
QueryPerformanceCounter QueryPerformanceFrequency same
ich les da raus das sowohl gettickcount als auch QueryPerformanceCounter eine 10ms latenz aufweisen können im schlimmsten fall.

unter linux werden die systemzeitroutinen benutzt die eine etwas höhere auflösung bieten dürften
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Der QueryPerformancaCounter ist tatsächlich genauer als GetTickCount. Mit ersterem lassen sich beispielsweise Laufzeiten von wenigen Programmzeilen messen. MS hat da nach meiner Erfahrung was falsches geschrieben.

waran
Beiträge: 17
Registriert: Mo 25. Dez 2006, 06:59

Beitrag von waran »

MS hat da nur was vertauscht :D

Die wollten schreiben, dass PerformanceCounter die gleiche Auflösung
wie PerformanceFrequency hat. Die Auflösung hängt von der Hardware ab
(bei mir 1/2000000000 Sekunde).

Wenn es unter Linux einen anderen Weg gibt, dann werde ich einfach
ruhigen Gewissens erstmal QPC benutzen.
Das ganze ist ja so flexibel, dass man es bei Bedarf leicht austauschen kann.

Trotzdem danke.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

was ist Qpc ?
Du kannst auch http://wiki.lazarus.freepascal.org/EpikTimer nehmen dort ist das in Assembler direkt mit den entsprechenden instructions gelöst sollte also so nah wie möglich an der der Hardware sein aber ob das auf anderen Plattformen als windows und Linux läuft wag ich zu bezweifeln wobei unter linux das eh die selben ergebnisse liefern dürfte wie die System timer
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

waran
Beiträge: 17
Registriert: Mo 25. Dez 2006, 06:59

Beitrag von waran »

QPC ist "QueryPerformanceCounter". Man muss es ja nicht immer Ausschreiben :D

Aber der Epik scheint genau das zu sein, was ich suche - sieht jedenfalls recht interessant
aus. Wenn der auch nonLCL arbeitet, dann isses sogar perfekt (weil es unter Windows
auch auf dem PerformanceCounter aufsetzt).
Ansonsten schaue ich mir einfach mal den Source an :)

Mit der Plattformbeschränkung kann ich leben. QPC ist leider nur auf x86 verfügbar-
kann ich nix dran ändern.

Aber danke.
BTW: Die Smileys sind ein bisschen hässlich...

EDIT:
Ich hab ihn eben kurz angetestet. Funktioniert super!
Das ist eine excellente Lösung. Danke.

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Und, ist er nonLCL? Unter Linux wäre sowas für mich auch interessant...

waran
Beiträge: 17
Registriert: Mo 25. Dez 2006, 06:59

Beitrag von waran »

Er ist eigentlich LCL.
Aber da es eine nicht-visuelle Komponente zu sein scheint, kann man
auch problemlos einfach nur die unit einbinden und die Klasse manuell
erzeugen.

Also: Beides.

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Na dann werd ich mal schaun, ob ich mit der unit zurechtkomme.

Viele Grüße, Euklid

Antworten