AW: Windows.GetTickCount64 auch unter Windows XP?
PS: Klassen sind optional und nicht immer notwendig oder sinnvoll :duck:
|
AW: Windows.GetTickCount64 auch unter Windows XP?
Zitat:
Wenn es doch umbedingt in einer "Klasse" sein soll, dann klatsch noch ein
Delphi-Quellcode:
vor das
static
Delphi-Quellcode:
und mach das
inline
Delphi-Quellcode:
zu
class
Delphi-Quellcode:
, dann sparst du dir noch ein (verstecktes) Funktionsargument und zusätzlich die (nicht benötigten) RTTI-Infos für die Klasse. Und dann kannst du auch die
record
Delphi-Quellcode:
s direkt noch mit in den Record übernehmen.
threadvar
|
AW: Windows.GetTickCount64 auch unter Windows XP?
Das weiß ich =)
Ich benutze sie sehr gerne und überall in meinen Units. Wenn ich irgendwo im Code stehen habe
Delphi-Quellcode:
dann kann das von Winapi.Windows kommen oder aus der eigenen Unit - kommt ganz auf die Reihenfolge in den uses an.
GetTickCount64
Wenn ich aber
Delphi-Quellcode:
sehe weiß ich genau wo es herkommt.
TGetTickCount.GetTickCount64
Edit Klar ich kann auch ohne Klasse arbeiten und schreibe
Delphi-Quellcode:
aber dann bekomme ich ggf. Probleme wenn ich die Unit mal umbenennen will.
MeineUnit.GetTickCount64
So?
Delphi-Quellcode:
type
TGetTickCount = record public class function GetTickCount64: UInt64; static; inline; end; |
AW: Windows.GetTickCount64 auch unter Windows XP?
Delphi-Quellcode:
type
TTest = record strict private class threadvar High: UInt64; class threadvar LastLow: Cardinal; public class function GetTickCount64: UInt64; static; inline; end; { TTest } class function TTest.GetTickCount64: UInt64; begin // ... end; |
AW: Windows.GetTickCount64 auch unter Windows XP?
Zitat:
Delphi-Quellcode:
-Bedingung benutzt wird: GetTickCount64 gibt's ab Vista, nicht erst ab Win8. Vermutlich haben deine Augen der Angabe "Windows Phone 8" zuviel Aufmerksamkeit geschenkt ;).
if
Grüße Dalai |
AW: Windows.GetTickCount64 auch unter Windows XP?
Zitat:
Durch die Änderung von class zu record habe ich sogar noch ein paar Compilerfehler bekommen an Stellen, wo ich static vergessen hatte hinzuzufügen. Habe dann direkt auch mal alle packed records in records umgeschrieben. Ich denke nun ist alles klar. |
AW: Windows.GetTickCount64 auch unter Windows XP?
Also habe ich das richtig verstanden, dass Du einfach nur die Ticks auslesen willst ? Wenn ja, wieso dann so kompliziert ?
Delphi-Quellcode:
Das sollte für rudimentäre Zwecke reichen. Willst Du ganz exaktes Messen veranstalten, da nimm doch die Routine von Agner Fog (Optimierungs Papst) :wink: :
function GetTicks : UInt64; register;
asm rdtsc {$IFDEF WIN64} shl rdx, 32 or rax, rdx {$ENDIF} end;
Delphi-Quellcode:
Um auf das "Tick" genau zu sein, müsstest Du dann zusätzlich die Funktion hintereinander aufrufen und die Differenz bilden. Bei späteren Messungen ist diese Differenz (verursacht von dem Funktionsaufruf) abzuziehen.
function GetTicks : UInt64;
asm {$IFDEF CPUX64} .NOFRAME // by Agner Fog push rbx // ebx is modified by cpuid sub rax, rax // 0 cpuid // serialize rdtsc // read time stamp counter into edx:eax shl rdx, 32 or rax, rdx // combine into 64 bit register push rax sub eax, eax cpuid // serialize pop rax // return value pop rbx ret {$ELSE} push ebx // ebx is modified by cpuid sub eax, eax // 0 cpuid // serialize rdtsc // read time stamp counter push eax push edx sub eax, eax cpuid // serialize pop edx pop eax pop ebx ret {$ENDIF} end; Gruß Thomas |
AW: Windows.GetTickCount64 auch unter Windows XP?
...und weil Windows immer noch kein Echtzeitbetriebssystem ist, darf man sich langsam wundern, zu welchen Exzessen manche Entwickler bereit sind, nur um (in diesen zeitlichen Auflösungen) vermutlich falsche Zahlen zu bekommen.
Sherlock |
AW: Windows.GetTickCount64 auch unter Windows XP?
Zitat:
Eins ist klar. Die obere der beiden ASM-Funktionen gibt Quark zurück. GetTickCount64 gibt: 653.954.506 GetTick gibt zurück: 1.349.183.170.576.009 |
AW: Windows.GetTickCount64 auch unter Windows XP?
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 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