Table des matières

Travailler avec le temps

Temps super précis

QueryPerformanceCounter

QueryPerformanceCounter récupère la valeur actuelle du compteur de performance, qui est un horodateur à haute résolution (<1µs) pouvant être utilisé pour les mesures d'intervalles de temps.

QueryPerformanceFrequency est une valeur fixe, on peut la stocker dans une valeur et utiliser cette valeur, pas besoin de faire un appel a chaque fois a cette API.

function QPC: int64;
begin
   if not QueryPerformanceCounter(Result)
   then Result:=-1;
end;
 
function QPF: int64;
begin
   if not QueryPerformanceFrequency(Result)
   then Result:=-1;
end;
 
function QPCToMicrosecond(const AQPC: int64): Double;
begin
   Result:=(AQPC*1000000) / QPF;
end;
 
function QPCToMillisecond(const AQPC: int64): Double;
begin
   Result:=(AQPC*1000) / QPF;
end;

Sources:

RDTSC

Surement le temps le plus petit avec lequel on peut travailler.

Sur mon PC RDTSC retourne une valeur 266x superieur a QueryPerformanceCounter (voir ci-dessus).
Et comme par hasard la vitesse de mon processeur est de 2.66Ghz

function HardwareTicks: int64; assembler;
asm
  RDTSC;
end;
Aprés je n'ai pousser l'experience plus loin,
a savoir comment recuperer la vitesse du processeur pour convertir le temps RDTSC en microsecondes ou nanosecondes.

Et quid des processeurs dont la vitesse varie en fonction de la charge ???