Bonjour tout le monde,
je viens d'implémenter rapidement un petit timer. Etant donné que j'ai de grosses lacunes sur tout ce qui concerne l'optimisation et tout ce qui touche à la "haute" précision, je n'ai pas trop confiance en mon code.
C'est pourquoi j'aimerais avoir votre avis, vos critiques et suggestions afin d'améliorer mon timer.
Je tiens à préciser que ce timer n'a pas vocation à être portable et ne doit fonctionner que sur Windows XP et ultérieurs.
Le but de ce timer est de calculer le temps écoulé entre deux points du programme, et ce, le plus précisément possible.
Voici le code (j'ai mis ensemble la définition et la déclaration de la classe pour simplifier mon post) :
Notes:
Code : 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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 class R_TheTimer { public: TheTimer() : m_bLastStartSucceeded (false) { LARGE_INTEGER tmp; QueryPerformanceFrequency(&tmp); m_frequency = tmp.QuadPart; } ~TheTimer(){} void Start() { m_bLastStartSucceeded = false; if ( QueryPerformanceCounter( (LARGE_INTEGER *)&m_last ) != 0 ) m_bLastStartSucceeded = true; } bool Stop(LONGLONG& timeElapsed) //returns false if failed { LARGE_INTEGER newTime; if ( QueryPerformanceCounter( (LARGE_INTEGER *)&newTime) == 0 ) return false; if ( !m_bLastStartSucceeded ) return false; LONGLONG newTimeMs = newTime.QuadPart * 10000 / m_frequency; LONGLONG lastTimeMs = m_last.QuadPart * 10000 / m_frequency; timeElapsed = ( newTimeMs - lastTimeMs ); return true; } private: LONGLONG m_frequency; LARGE_INTEGER m_last; bool m_bLastStartSucceeded; }; //Un exemple d'utilisation: TheTimer the_timer; LONGLONG time_elapsed; the_timer.Start(); // traitements if ( the_timer.Stop(time_elapsed) ) { cout << "time elapsed : " << time_elapsed << endl; }
- j'utilise ce code dans un cadre non professionnel.
- la documentation de la msdn sur les fonctions QueryPerformanceCounter et QueryPerformanceFrequency est ridiculement pauvre.
Partager