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
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 ...
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 : 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 #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; }; #endifVous en pensez quoi ?
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 #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 : Sélectionner tout - Visualiser dans une fenêtre à part 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...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...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.Voilà j'ai trouvé : GetTickCount();
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager