AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Windows.GetTickCount64 auch unter Windows XP?
Thema durchsuchen
Ansicht
Themen-Optionen

Windows.GetTickCount64 auch unter Windows XP?

Ein Thema von Glados · begonnen am 11. Okt 2017 · letzter Beitrag vom 16. Jan 2018
Antwort Antwort
Seite 3 von 3     123   
Rollo62

Registriert seit: 15. Mär 2007
4.095 Beiträge
 
Delphi 12 Athens
 
#21

AW: Windows.GetTickCount64 auch unter Windows XP?

  Alt 13. Okt 2017, 13:22
Ist vielleicht "Off-topic", aber das TStopwatch gäbe es auch noch.
Nehme ich mittlerweile lieber statt der GetTickCounts, ist auch CrossPlatform

Rollo
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#22

AW: Windows.GetTickCount64 auch unter Windows XP?

  Alt 13. Okt 2017, 13:33
Kann man demnach die oben genannten Routinen statt GetTickCount(64) verwenden oder eher nicht?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#23

AW: Windows.GetTickCount64 auch unter Windows XP?

  Alt 13. Okt 2017, 14:16
Naja "falsch" würde ich das nicht nennen. Das ist ungefär so, als würdest du eine Stopuhr für das Eierkochen nutzen. Je nachdem was, auf Deinem Rechner läuft, ist die Zeitspanne für ein und die selbe Routine immer unterschiedlich. Da erreichst Du eine Genauigkeit, die keine Aussagekraft besitzt. Unter Windows mußt Du immer mehrere Messungen durchführen um einen Trend zu erkennen. Eine Aussage wie "die Laufzeit ist 25 Timerticks" ist unter Windows schlicht Blödsinn.

Gruß
K-H
"vermutlich"

Früher (vielleicht auch teilweise noch heute) hatte jeder CPU-Kern seinen eigenen Tickcounter
* Problem: Windowsch schiebt standardmäßig die Programme umher, also wenn du den ersten TickCount nimmst und mit einem zweiten verrechnest (Differenz), dann kann da schnell Mist raus kommen, wenn zwischendurch dein Programm (der Thread) auf einen anderen Kern verschoben wurde.
Daher gingen viele CPU-Hersteller dazu über einen "virtuellen" globalen TickCount zu nehmen, der mit keinem der Kerne übereinstimmt.

Außerdem werden häufig die CPUs/Kerne zur Laufzeit lastabhängig getacktet.

Fazit: dieser der CPU-TickCount stimmt nicht mehr mit den Ticks (ausgeführten Aktionen auf dem Kern) der Kerne überein.


Und bezüglich Echtzeitsystem ... jupp, jede Anwendung/Thread hat einen TimeSlot und wirt zwischendurch immer mal wieder pausiert, während andere Prozesse/Threads auf dem Kern rechnen dürfen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#24

AW: Windows.GetTickCount64 auch unter Windows XP?

  Alt 13. Okt 2017, 16:46
Zu RDTSC:
Zitat von MSDN:
We strongly discourage using the RDTSC or RDTSCP processor instruction to directly query the TSC because you won't get reliable results on some versions of Windows, across live migrations of virtual machines, and on hardware systems without invariant or tightly synchronized TSCs. Instead, we encourage you to use QPC to leverage the abstraction, consistency, and portability that it offers.
Möglichst hohe Genauigkeit ist für normale Timer-Zwecke aber ja eh ziemlich irrelevant. So wie ich es verstanden habe, will der TE nur einen performanten Timer, welcher auch bei langen Laufzeiten nicht overflowt. Weitere Kriterien wurden ja nicht genannt. Zum Benchmarken ist unter Windows sicherlich MSDN-Library durchsuchenQueryPerformanceCounter die bessere Lösung. Außerdem sollte man dann die CPU Mask auf einen Kern fixieren und ggfls. noch die Prozess- und Thread-Priorität auf Maximum schrauben.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#25

AW: Windows.GetTickCount64 auch unter Windows XP?

  Alt 14. Okt 2017, 09:58
Ich habe hier vier Beiträge gelöscht, die in einer völligen Entgleisung endeten.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#26

AW: Windows.GetTickCount64 auch unter Windows XP?

  Alt 15. Jan 2018, 22:18
ich nutz QueryPerformanceCounter immer wenn ich was benche, ich finde es sehr präzise.
Nur als vergleich gegen GetTickCount egal ob x86 oder x64.
Als alternative halt.
Ich hoffe der code ist mit neueren delphi versionen kompatibel.

Delphi-Quellcode:
{QueryPerformanceCounter uses the PC's clock counter just as GetTickCount, but it
reads the current value of the countdown register in the timer chip to gain more
accuracy -- down to 1.193MHz (about 800ns).

However, it takes 5 to 10us to call QueryPerformanceCounter, because it has to
do several port I/O instructions to read this value.

If you are running multiprocessor NT, QueryPerformanceCounter uses the Pentium
cycle counter.

You should not be using the raw value of QueryPerformanceCounter; you should
always divide by QueryPerformanceFrequency to convert to some known time base.
QueryPerformanceCounter doesn't run at the same rate on all machines.

The example below shows how to use it in Delphi 3/4:
}


type
  TInt64 = TLargeInteger;
var
  Frequency, lpPerformanceCount1, lpPerformanceCount2 : TLargeInteger;

begin
  QueryPerformanceCounter(TInt64((@lpPerformanceCount1)^));

  // activity to measure
  my_proc;

  QueryPerformanceCounter(TInt64((@lpPerformanceCount2)^));
  QueryPerformanceFrequency(TInt64((@Frequency)^));

  // this shows the time in ns
  ShowMessage(IntToStr(Round(1000000 * (lpPerformanceCount2.QuadPart -
                       lpPerformanceCount1.QuadPart) / Frequency.QuadPart)));
end;
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#27

AW: Windows.GetTickCount64 auch unter Windows XP?

  Alt 16. Jan 2018, 00:37
Hallo,
OK, Info zur Starter-Edition gelöscht.
Kennt ja wohl jeder mittlerweise.
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 12:45 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