bonjour,
je cherche � r�aliser un chronom�tre relativement pr�cis. Les fonctions Sleep() et clock() ne donnant pas satisfaction, je me suis rabattu sur les fonctions QueryPerformanceFrequency et QueryPerformanceCounter.
Si j'ai bien compris la doc de QueryPerformanceCounter, la fonction prend un param�tre LARGE_INTEGER (entier 64 bits) et ce compteur est incr�ment� � la fr�quence retourn�e par QueryPerformanceFrequency .
On peut donc ainsi r�aliser des chronom�tres assez pr�cis
Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 LARGE_INTEGER Start; LARGE_INTEGER Stop; LARGE_INTEGER Current; LARGE_INTEGER proc_freq; int duree; duree = 20; QueryPerformanceFrequency(&proc_freq); QueryPerformanceCounter(&Start); Stop.QuadPart = Start.QuadPart + LONGLONG( (duree * proc_freq.QuadPart * 1.0) / 1000.0); do { QueryPerformanceCounter(&Current); }while (Current.QuadPart < Stop.QuadPart);
Mais quelque chose me g�ne....
En informatique un entier, qu'il soit cod� sur 8, 16 ou 64 bits est born�.....
Donc en toute logique � un moment ou � un autre ma variable Current va atteindre son maximum et (si je ne me trompe pas) lors du prochain tic repassera � 0.
Du coup dans ma boucle si Current repasse � 0
Code c++ : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 do { QueryPerformanceCounter(&Current); }while (Current.QuadPart < Stop.QuadPart);
ma condition d'arr�t sera fausse ???? Non?
Partager