Thema: Delphi Timer viel zu ungenau?

Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#11

Re: Timer viel zu ungenau?

  Alt 8. Aug 2003, 00:12
@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
  Mit Zitat antworten Zitat