begin process at 2010 02 09 23:50:03
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date / Heure

 > CLASSE TIMER SOUS WINDOWS ( CHRONOMÈTRE )

CLASSE TIMER SOUS WINDOWS ( CHRONOMÈTRE )


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Date / Heure Niveau :Initié Date de création :17/08/2002 Date de mise à jour :02/04/2004 13:08:13 Vu :14 683

Auteur : ngryman

Ecrire un message privé
Site perso
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Cette classe sert à connaitre combien de temps s'est écoulé depuis son démarrage ( Timer::Start() ) par l'intermèdiaire de la méthode Timer::GetTotalElapsedTime() et de connaître le temps écoulé entre deux appels de la méthode Timer::GetElapsedTime().
Le temps est renvoyé sous la forme d'un float en secondes.

Source

  • #include <windows.h>
  • #include <mmsystem.h>
  • /***** Déclaration de la classe *****/
  • class Timer
  • {
  • LONGLONG start_time;
  • LONGLONG cur_time;
  • LONGLONG last_time;
  • float time_elapsed;
  • float time_scale;
  • typedef float (DXPTimer::*Func)();
  • Func UpdateFunc;
  • float GetTimePerf();
  • float GetTime();
  • public:
  • Timer(); // Constructeur
  • ~Timer(); // Destructeur
  • void Start(); // Initialisation du timer
  • float GetTotalElapsedTime(); // Temps écoulé depuis l'initialisation du timer
  • float GetElapsedTime(); // Temps écoulé entre deux appels de la fonction
  • };
  • /***** Description des méthodes de la classe *****/
  • Timer::Timer()
  • {
  • }
  • Timer::~Timer()
  • {
  • }
  • void Timer::Start()
  • {
  • LONGLONG perf_cnt = 0;
  • if (QueryPerformanceFrequency((LARGE_INTEGER *) &perf_cnt))
  • {
  • time_scale = 1.0f / perf_cnt;
  • QueryPerformanceCounter((LARGE_INTEGER *) &start_time);
  • last_time = start_time;
  • this->UpdateFunc = &Timer::GetTimePerf;
  • }
  • else
  • {
  • start_time = last_time = timeGetTime();
  • time_scale = 0.001f;
  • this->UpdateFunc = &Timer::GetTime;
  • }
  • }
  • float Timer::GetTime()
  • {
  • return (float)timeGetTime();
  • }
  • float Timer::GetTimePerf()
  • {
  • QueryPerformanceCounter((LARGE_INTEGER *) &cur_time);
  • return (float)cur_time;
  • }
  • float Timer::GetTotalElapsedTime()
  • {
  • cur_time = (this->*UpdateFunc)();
  • time_elapsed = (cur_time - start_time) * time_scale;
  • last_time = cur_time;
  • return time_elapsed;
  • }
  • float Timer::GetElapsedTime()
  • {
  • cur_time = (this->*UpdateFunc)();
  • time_elapsed = (cur_time - last_time) * time_scale;
  • last_time = cur_time;
  • return time_elapsed;
  • }
#include <windows.h>
#include <mmsystem.h>

/***** Déclaration de la classe *****/

class Timer
{

	LONGLONG	start_time;
	LONGLONG	cur_time;
	LONGLONG	last_time;
	float		time_elapsed;
	float		time_scale;

	typedef float (DXPTimer::*Func)();
	Func UpdateFunc;

	float GetTimePerf();
	float GetTime();

public:

	Timer();                                 // Constructeur
	~Timer();                               // Destructeur
	
	void Start();                            // Initialisation du timer
	float GetTotalElapsedTime();     // Temps écoulé depuis l'initialisation du timer
	float GetElapsedTime();            // Temps écoulé entre deux appels de la fonction

};

/***** Description des méthodes de la classe *****/

Timer::Timer()
{

}

Timer::~Timer()
{

}

void Timer::Start()
{
	LONGLONG	perf_cnt = 0;

	if (QueryPerformanceFrequency((LARGE_INTEGER *) &perf_cnt))
	{
		time_scale = 1.0f / perf_cnt;
		QueryPerformanceCounter((LARGE_INTEGER *) &start_time);
		last_time = start_time;
		this->UpdateFunc = &Timer::GetTimePerf;
	}
	else
	{ 
		start_time = last_time = timeGetTime();
		time_scale = 0.001f;
		this->UpdateFunc = &Timer::GetTime;
	}
}

float Timer::GetTime()
{
	return (float)timeGetTime();
}

float Timer::GetTimePerf()
{
	QueryPerformanceCounter((LARGE_INTEGER *) &cur_time);
	
	return (float)cur_time;
}

float Timer::GetTotalElapsedTime()
{
	cur_time = (this->*UpdateFunc)();

	time_elapsed = (cur_time - start_time) * time_scale;
	last_time = cur_time;

	return time_elapsed;
}

float Timer::GetElapsedTime()
{
	cur_time = (this->*UpdateFunc)();

	time_elapsed = (cur_time - last_time) * time_scale;
	last_time = cur_time;

	return time_elapsed;
} 

 Conclusion

Le timer choisit automatiquement entre le compteur haute précision de windows ou bien le compteur standard.
Ce timer fait parti du projet que j'ai en ce moment qui est un moteur 3D utilisant DirectX 8.1. Pour en savoir plus sur le moteur et son développement http://membres.lycos.fr/detonatorxp/


 Sources du même auteur

UTILISER LE CLAVIER SOUS DIRECTINPUT 8

 Sources de la même categorie

Source avec Zip CLASSE MOMENT V2.0 par le_duche
CALCUL DATE DE PAQUES (DATE MOBILE) par steph12358
Source avec une capture VACCATION (AVEC FONCTION) CONSOLERIE, REMIX GCC par sebman
Source avec Zip Source avec une capture AFFICHER ET DIRE L'HEURE (REPONSE FORUM) par ndubien
Source avec Zip Source avec une capture ARRÊT AUTOMATIQUE DE WINDOWS. par patarotalexandre

Commentaires et avis

Commentaire de Dax le 27/11/2002 14:52:55

lol tu va po le croire mais je dois remettre un projet moi aussi et il dois inclure une fonction time avec classe llllolllll et bin voila donc un grand grand merci a toi

tu verra certainement ta fonction dans mon projet (qui sera publier vers decembre)

merci encore

Commentaire de weed le 30/12/2002 14:05:46

j'ai fais un copié collé sur mon borland pour tester ton code meme sans de main cela devrai fonctionner...
voici les erreurs que j'ai
Info :noname00.cpp: out of date with destination noname00.obj
Info :  noname00.cpp: source date 01:57:03 P 30/12/2002  destination date &lt;unknown&gt;
Info :Compiling E:My documents pro illiers etris
oname00.cpp
Error:  noname00.cpp(15,28):Qualifier 'DXPTimer' is not a class or namespace name
Error:  noname00.cpp(15,30):Declaration terminated incorrectly
Error:  noname00.cpp(16,20):Type name expected
Error:  noname00.cpp(16,20):Declaration missing ;
Error:  noname00.cpp(39,9):Destructor name must match the class name
Error:  noname00.cpp(53,25):'UpdateFunc' is not a member of 'Timer'
Error:  noname00.cpp(53,37):Qualifier 'DXPTimer' is not a class or namespace name
Error:  noname00.cpp(53,39):Statement missing ;
Error:  noname00.cpp(59,25):'UpdateFunc' is not a member of 'Timer'
Error:  noname00.cpp(59,37):Qualifier 'DXPTimer' is not a class or namespace name
Error:  noname00.cpp(59,39):Statement missing ;
Error:  noname00.cpp(77,35):Undefined symbol 'UpdateFunc'
Error:  noname00.cpp(87,35):Undefined symbol 'UpdateFunc'

Commentaire de Moh33 le 24/10/2003 16:16:07

Hi,
je suis un étudiant dZinformatique et je fais actuellement un stage. je suis entrain dZécrire un programme "Testdriver" qui permet déffectuer des tests pour les évaluer. Pour cela jZaurais besoin dZune fonction qui permet de calculer le temps duré par chaque teste ainsi que le temps de démarrage ...
Après avoir compilé cette classe, les erreurs suivantes ont été affichées:

c: error C2653: 'DXPTimer' : is not a class or namespace name
c: error C2645: no qualified name for pointer to member (found ':: *')
c: error C2653: 'DXPTimer' : is not a class or namespace name
c: error C2276: '&' : illegal operation on bound member function expression
c: error C2653: 'DXPTimer' : is not a class or namespace name
c: error C2276: '&' : illegal operation on bound member function expression
c: error C2297: '-&gt;*' : illegal, right operand has type 'float (__cdecl *)(void)'
c: error C2297: '-&gt;*' : illegal, right operand has type 'float (__cdecl *)(void)'
Error executing cl.exe.
Creating browse info file...

Test7.exe - 8 error(s), 0 warning(s)

je te serais trés reconnaissant, si tu pourrais mZaider.

merci dZavance

moh

Commentaire de ngryman le 02/04/2004 13:09:06

MAJ un peu tardive dsl

Commentaire de XelectroX le 19/11/2008 21:53:41

Bonjour,
C'est quoi ce DXPTimer ???
Personne ne l'a, même si c'était en 2004 ..., mais je l'ai toujours pas moi.
C'est plustôt ennuyant lorsqu'on vient juste de commencer le c++ et qu'on y connais pas encore grand chose :(.

Commentaire de XelectroX le 19/11/2008 22:03:07

Ca va je devrais avoir modifier le code correctement pour que ca fonctionne

Commentaire de XelectroX le 19/11/2008 22:03:51

Au cas ou quelqu'un le voudrait :

#include <windows.h>
#include <mmsystem.h>
/***** Déclaration de la classe *****/
class Timer
{
LONGLONG start_time;
LONGLONG cur_time;
LONGLONG last_time;
float time_elapsed;
float time_scale;
float GetTimePerf();
//float GetTime();
public:
Timer();                                 // Constructeur
~Timer();                               // Destructeur

void Start();                            // Initialisation du timer
float GetTotalElapsedTime();     // Temps écoulé depuis l'initialisation du timer
float GetElapsedTime();            // Temps écoulé entre deux appels de la fonction
};
/***** Description des méthodes de la classe *****/
Timer::Timer()
{
}
Timer::~Timer()
{
}
void Timer::Start()
{
LONGLONG perf_cnt = 0;
//if (QueryPerformanceFrequency((LARGE_INTEGER *) &perf_cnt)){
time_scale = 1.0f / perf_cnt;
QueryPerformanceCounter((LARGE_INTEGER *) &start_time);
last_time = start_time;
//}else{
// start_time = last_time = timeGetTime();
// time_scale = 0.001f;
//}
}
//float Timer::GetTime()
//{
//return (float)timeGetTime();
//}
float Timer::GetTimePerf()
{
QueryPerformanceCounter((LARGE_INTEGER *) &cur_time);

return (float)cur_time;
}
float Timer::GetTotalElapsedTime()
{
cur_time = this->GetTimePerf();
time_elapsed = (cur_time - start_time) * time_scale;
last_time = cur_time;
return time_elapsed;
}
float Timer::GetElapsedTime()
{
cur_time = this->GetTimePerf();
time_elapsed = (cur_time - last_time) * time_scale;
last_time = cur_time;
return time_elapsed;
}

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales