Bonjour,
Comment mesurer précisement le temps d'exécution d'une fonction en C++ pur. Je cherche une fonction généraliste (pas une fonction de l'API windows).
Merci d'avance!
Cordialement,
Rodrigue
Version imprimable
Bonjour,
Comment mesurer précisement le temps d'exécution d'une fonction en C++ pur. Je cherche une fonction généraliste (pas une fonction de l'API windows).
Merci d'avance!
Cordialement,
Rodrigue
Avec quelle précision ? - sachant que la fonction peut être interrrompue par l'OS qui donne le CPU à un autre thread -
Bon n'exagérons pas mais la milliseconde serait parfait ;)...
Je ne veux pas le centième de millionième de seconde!
Si tu veux un timer précis il faudra de toute façon passer par une fonction de l'OS. Tu peux aussi chercher du côté de RDTSC, il y a un tuto qui en parle ici si je me souviens bien.
J'ai regardé du côté de RDTSC mais ça ne m'intéresse pas vraiment :roll:...
Que puis-je utiliser d'autres alors (même si c'est spécifique windows) ?
Il y'a les apis QueryPerfomanceCounter et GetProcessTimes.
QueryPerformanceCounter est plus précis je pense.
Puis-je utiliser time_t ?
Je me suis fait une petite classe très simple qui me permet de mesurer des temps:
.h
.cpp
Code:
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 #ifndef Chrono_H #define Chrono_H #include <time.h> #include <stdio.h> #include <sys/types.h> #include <sys/timeb.h> #pragma once class Chrono { public: Chrono(void); ~Chrono(void); time_t Start(void); time_t Stop(void); time_t TimeElapsed(void); private: time_t t1, t2; }; #endif
Vous en pensez quoi ?Code:
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 #include "StdAfx.h" #include "Chrono.h" Chrono::Chrono(void) { } Chrono::~Chrono(void) { } time_t Chrono::Start(void) { return time(&t1); } time_t Chrono::Stop(void) { return time(&t2); } time_t Chrono::TimeElapsed(void) { return (t2 - t1); }
Quand je fais un, je n'obtiens pas un temps vraiment précis ... Comment faire pour afficher le temps avec plus de précision ?Code:std::cout << chrono->TimeElapsed << std::endl
Oui je sais j'suis con:
Bon je vais regarder de ce pas du côté des fonctions que vous m'avez filées...Citation:
Return the time as seconds elapsed since midnight, January 1, 1970. There is no error return.
Voilà j'ai trouvé : GetTickCount();
Le plus simple, le moins de bibli et une précision de ~10 ms. Amplement suffisant... Merci à tous !
Pourtant...Citation:
J'ai regardé du côté de RDTSC mais ça ne m'intéresse pas vraiment
http://haypo.developpez.com/article/frequence_cpu/
Ce n'est pas vraiment ce qu'il y a de plus précis, QueryPerformanceCounter est meilleur de ce côté là. Mais bon faut voir l'ordre de grandeur de ce que tu veux mesurer, ça évitera qu'on parte dans des solutions ultra-précises si tu n'en as pas besoin.Citation:
Voilà j'ai trouvé : GetTickCount();