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
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!
Rodrigue
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.
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
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) ?
Rodrigue
Il y'a les apis QueryPerfomanceCounter et GetProcessTimes.
QueryPerformanceCounter est plus précis je pense.
L'itération est humaine; la récursion, divine.
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
Rodrigue
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.
Rodrigue
Voilà j'ai trouvé : GetTickCount();
Le plus simple, le moins de bibli et une précision de ~10 ms. Amplement suffisant... Merci à tous !
Rodrigue
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();
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
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