Delphi-Quellcode:
queryperformancecounter(qpc);
tsc:=timestamp;
tick:=GetTickCount;
sleep(2000);
queryperformancecounter(qpc1);
tsc1:=timestamp;
tick1:=GetTickCount;
so wäre es besser. Der Meßfehler von GetTickCount(), TimeStamp und QPC nivelliert sich so ein bischen, relativ zueinander gesehen.
Einzelmessungen der art
Delphi-Quellcode:
queryperformancecounter(qpc);
sleep(2000);
queryperformancecounter(qpc1);
tsc:=timestamp;
sleep(2000);
tsc1:=timestamp;
tick:=GetTickCount;
sleep(2000);
tick1:=GetTickCount;
wären dagegen falsch. Der Aufrufoverhead jeder Funktion verursacht einen wesentlich kleineren Meßfehler als das Sleep(2000). Dieses kann +-20ms bedeuten.
Noch besser ist es so:
Delphi-Quellcode:
sleep(0);
queryperformancecounter(qpc);
tsc:=timestamp;
tick:=GetTickCount;
sleep(2000);
queryperformancecounter(qpc1);
tsc1:=timestamp;
tick1:=GetTickCount;
Das Sleep(0) "erzwingt" einen anstehenden Task/Threadswitch und so reduziert sich die Wahrscheinlichkeit drastisch das innerhalb den nachfolgenden drei Funktionsaufrufen dieser anstehende Switch durchgeführt wird. Dieser würde dann dafür sorgen das die Messung komplett untauglich ist.
Gruß Hagen