Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Zeitberechner mit QueryPerformanceCounter
beastofchaos - Sa 08.01.11 21:13
Titel: Zeitberechner mit QueryPerformanceCounter
Hallo Leute,
Habe mich mal umgeschaut, aber ich finde in meinem Delphi-Buch, bei Google, Wikipedia und in diesem Forum keine direkte Definition/Erklärung von QueryPerformance-Funktionen.
Ich lerne erst sein ein paar Monaten Delphi und basteln schon an einem Minigolfprogramm für meine Prüfung. Nach anger Zeit und viel Hilfe in diesem Forum, hab ich fast alles bei einander und muss das ganze nur noch zu einem vollen Programm stricken ;) Leider ist ein wichtiger Teil meines Programmes für mich unverständlich, da es mir jemand geschickt hat und ich es nicht selber gemacht habe.
Ein Teil der unverständlichen Prozeduren/Funktionen ist folgende, die die vergangene Zeit liest und für die nächste Bewegegung der Kugel gebraucht wird ( -> Timebased Movements ):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| procedure TMainForm.FormCreate(Sender: TObject); var begin if not [b]QueryPerformanceFrequency(Frequency)[/b] then Application.Terminate; [b]QueryPerformanceCounter(CalcTime);[/b] . . . end;
procedure TMainForm.CalcTimestep; var CurrTime: int64; begin [b]QueryPerformanceCounter(CurrTime);[/b] Timestep := (CurrTime - CalcTime) / Frequency; CalcTime := CurrTime; end;
procedure TMainForm.IdleHandler(Sender: TObject; var Done: Boolean); begin CalcTimestep; . . . end; |
Was mir auch schon aufgefallen ist, dass die Prozedur "CalcTimestep" selber die vergangene Zeit vom Programmstart("Form.Create") aus berechnet. Aber welche Zeit liest er mit der Funktion QueryPerformanceCounter. Die Zeit vom Programmstart/Pcstart an diesem Zeitpunkt?
Und als zweites verstehe ich nicht, was "QueryPerformaceFrequenz()" anstellt - Was ist hier direkt gemeint mit Frequenz?
Freundliche Grüße, Thomas alias beast ;)
beastofchaos - So 09.01.11 02:04
Hab ich schon einmal gesehen. Hab mir jetzt doch die Mühe gemacht und versucht, das Englisch zu verstehen ( ich bin nicht gut in Engl. ), aber ich weiß leider nicht, was genau "QueryPerformanceCounter" zählt. Welche Zeit - etwa die Zeit von "Delphi-Urknall"(30.12.1899)? Oder nur vom Systemstart? :D
Das ist die einzige wichtige Frage noch... :/
Grüße, Thomas alias beast
jaenicke - So 09.01.11 02:13
beastofchaos hat folgendes geschrieben : |
| Das ist die einzige wichtige Frage noch... :/ |
Das weiß man nicht. Das hängt von der Implementierung in der verwendeten Hardware ab. Wofür ist das dir denn wichtig? :gruebel:
beastofchaos - So 09.01.11 02:34
Naja, ich befürchte, dass in der Präsentation, einer der 3 Prüfer mich dann über diese Prozedur abfragt am Ende und ich dahcte, das wäre vll wichtig. Ich sag einfach mal:" Und mit diesem Befehl wird die Systemzeit gelesen und in CalcTime/CurrTime gespeicht :p Dann muss ich nur noc hdie Mathematik in dem doofen Programm ganz vcerstehen und das selbst dann ausbauen ;)
Danke schonmal, deer Thread ist ja dann somit abgeschlossen
Bergmann89 - So 09.01.11 02:46
Hey,
ich denke, wenn du deinem Prüfer sagst, was die Funktion macht, bzw wozu sie verwendet wird sollte reichen. Und wenn er doch nachfragt, dann kannst du ihm ja sagen, das diese Funktion vom System bereit gestellt wird und du nix über die genaue Funktionsweiße gefunden hast (gesucht hast du ja). Das dürfte er dir dann nicht als Minuspunkt anrechnen, man kann ja schließlich nicht alles wissen. Genauso könnte er dich fragen welche Subroutinen ausgeführt werden um ein Fenster zu erstellen, denn da benutzt du ja auch eins ;)
MfG Bergmann.
beastofchaos - So 09.01.11 11:40
Gut! danke, ist sicher auch unwarscheinlich, dass sie danach fragen :p
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!