| Autor |
Beitrag |
Mahjong
      
Beiträge: 67
|
Verfasst: So 15.02.09 16:08
Hallo,
Ich muss momentan mit GetTickCount arbeiten und damit bestimmen wie lange ein bestimmter Programmabschnitt läuft,
mein Ansatz sieht bis jetzt so aus :
Delphi-Quelltext 1: 2: 3: 4: 5:
| time1 := GetTickCount; Prozedur(); time2 := GetTickCount;
label1.caption := intToStr(time2 - time1); |
Seltsamerweiße erhalte ich "0" als Wert. Wenn ich jedoch nach jedem TickCount aufruf die Zeit z.B. per ShowMessage ausgabe funktioniert die Sache. Es scheint als müsste ich die Werte erst irgendwie verarbeiten damit es funtioniert.
Laut der Anleitung an die ich mich halten soll, sollte diese Methode der Zeitmessung genau so funktionieren.
Eingesetzt wird Delphi 2009 auf Vista x64.
Gruß
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 15.02.09 16:14
GetTickCount ist ungenau, alles unter ca. 15-30ms lässt sich damit nicht korrekt messen.
Mach mehrere Durchläufe (100-1000) und teile den Wert dadurch. Und dann gibt es noch QueryPerformanceCounter, das sehr viel genauer ist. Einzelne Werte im < 1 ms Bereich solltest du aber auch damit kaum richtig messen können. Mehrere Durchläufe mit Mittelwert sind da immer am besten.
|
|
Mahjong 
      
Beiträge: 67
|
Verfasst: So 15.02.09 17:32
jaenicke hat folgendes geschrieben : | GetTickCount ist ungenau, alles unter ca. 15-30ms lässt sich damit nicht korrekt messen.
Mach mehrere Durchläufe (100-1000) und teile den Wert dadurch. Und dann gibt es noch QueryPerformanceCounter, das sehr viel genauer ist. Einzelne Werte im < 1 ms Bereich solltest du aber auch damit kaum richtig messen können. Mehrere Durchläufe mit Mittelwert sind da immer am besten. |
Darauf bin ich auch gekommen, nur leider muss ich es wie oben beschrieben lösen. (Die Mittelwert Sache werde ich jedoch tun). Mein eigentliches Problem besteht jedoch darin das es nicht funktioniert, also auch nicht ungenau.
GetTickCount; gibt mir keine Ergebnisse. Zumindest nicht solange ich dannach kein Showmessage(time1) ausführen, warum auch immer.
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 15.02.09 17:38
Kann es sein, dass danach noch mehr Code folgt, so dass einfach kein Neuzeichnen des Labels erfolgt? Dann müsstest du Application.ProcessMessages oder Label1.Repaint / Label1.Refresh nach der Zuweisung der neuen Caption schreiben. Allerdings kostet das natürlich auch wieder etwas Zeit, in einer Schleife sollte das also ggf. nur alle 100 Durchläufe oder so passieren.
Mahjong hat folgendes geschrieben : | | Darauf bin ich auch gekommen, nur leider muss ich es wie oben beschrieben lösen. |
Was spricht gegen QueryPerformanceCounter? 
|
|
Mahjong 
      
Beiträge: 67
|
Verfasst: So 15.02.09 18:06
|
|
Chemiker
      
Beiträge: 194
Erhaltene Danke: 14
XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
|
Verfasst: So 15.02.09 19:07
Hallo,
Wie ist time1 und time2 deklariert? Es sollte als DWord deklariert sein!
Bis bald Chemiker
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 15.02.09 19:12
Cardinal geht aber auch 
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 15.02.09 19:28
Einloggen, um Attachments anzusehen!
|
|
Mahjong 
      
Beiträge: 67
|
Verfasst: So 15.02.09 20:00
Vielen Dank,
Der Cardinal/DWord Tipp bringt mich weiter, die Ergebnisse sind besser  .
|
|
Chemiker
      
Beiträge: 194
Erhaltene Danke: 14
XP, Vista 32 Bit, Vista 64 Bit, Win 7 64 Bit, Win 10, Win 11
BDS 2006, RAD Studio 2009+C++, Delphi 13, VS 2010 Prof.
|
Verfasst: So 15.02.09 20:47
Hallo jaenicke,
ich habe DeddyH nicht widersprochen, aber zur besseren Lesbarkeit sollte man doch als DWord die Variablen deklarieren.
Für Datum/Zeit Variabel benutzt man auch den Type TDateTime und nicht Double.
Bis bald Chemiker
|
|
|