Hallo Hagen,
ich benutze zum Zeitmessen auch nur RDTSC, und die Kalibrierung mache ich auch so wie Du.
Allerdings habe ich bemerkt, daß bei sehr kurzen Kalibrierungszeiten (Du erwähntest 10 ms) die Ergebnisse (RDTSC-Ticks/Sekunde) weit weg waren von der "tatsächlichen" Frequenz. Als optimale Zeitspanne habe ich 200 ms gefunden.
Delphi-Quellcode:
FUNCTION TimeStamp:Int64;
asm
rdtsc
end;
FUNCTION TimeStampFrequency:int64;
var oldpriority:word; q0,q1,qf,ts0,ts1:int64; seconds:extended;
begin
oldpriority:=GetThreadPriority(GetCurrentThread);
SetThreadPriority(GetCurrentThread,THREAD_PRIORITY_TIME_CRITICAL);
QueryPerformanceCounter(q0);
ts0:=TimeStamp;
Sleep(200);
ts1:=TimeStamp;
QueryPerformanceCounter(q1);
SetThreadPriority(GetCurrentThread,oldpriority);
QueryPerformanceFrequency(qf);
seconds:=(q1-q0)/qf;
result:=Trunc((ts1-ts0)/seconds+0.5);
end;