@MrSpock, am genauesten ist heutzutage der Real Time Counter, RDTSC. Dieser wird mit jedem Takt der externen CPU Taktfrequenz erhöht. Alle neueren CPU's unterstützen diesen:
Delphi-Quellcode:
function IsRDTSCPresent: Boolean;
assembler;
// check is CPUID Instruction present
// extracted from my DEC Part I (Copyright), and litte bit expanded to support TSC Flag directly
asm
PUSHFD
PUSHFD
POP EAX
MOV EDX,EAX
XOR EAX,0040000h
PUSH EAX
POPFD
PUSHFD
POP EAX
XOR EAX,EDX
JZ @@1
PUSHFD
POP EAX
MOV EDX,EAX
XOR EAX,0200000h
PUSH EAX
POPFD
PUSHFD
POP EAX
XOR EAX,EDX
@@1: POPFD
TEST EAX,EAX
JZ @@2
MOV EAX,1
DW 0A20Fh
// CPUID
TEST EDX,010h
// test RDTSC flag in Features
SETNZ AL
@@2:
end;
function RDTSC: Int64;
// sollte UInt64 sein
asm
DW 0310Fh
// RDTSC Opcode
end;
procedure Test;
var
Start,Cylces: Int64;
begin
if IsRDTSCPresent
then
begin
Start := RDTSC;
DoAnything;
Cycles := RDTSC - Start;
end;
// Cycles ~ Taktzyklen der CPU die DoAnything benötigt hat
end;
Falls dich noch die Umwandlung von Cycles in Millisekunden bzw. Nanosekunden interessiert, poste ich sie.
Gruß Hagen