L'horloge de performance

Dans le fichier decl_timer.h on déclare deux fonctions.

#include <windows.h>

LONGLONG* horloge(void);
unsigned char timer(unsigned, LONGLONG*);

Voici les fonctions du fichier timer.cpp :

#include <dos.h>
#include <timer.h>
#include <malloc.h>

LONGLONG* horloge(void) {

LONGLONG *t = (LONGLONG*)malloc(sizeof(LONGLONG));
if (QueryPerformanceFrequency((LARGE_INTEGER*)t))
return t;
return NULL;
}

unsigned char timer(unsigned t, LONGLONG *tps) {

LONGLONG temps_2;

QueryPerformanceCounter((LARGE_INTEGER*)&temps_2);

if(temps_2 - *tps < t) return 1;

*tps = temps_2;
return 0;

}

La fonction horloge permet de détecter s'il existe ou non une horloge de performance. Tous les ordinateur modernes en ont une.

la fonction timer nous permet de calculer le laps de temps écoulé entre deux appels de la fonction. si le laps de temps est inférieur à t, elle retourne 1, sinon elle retourne 0.

On rajoute la détection à la fonction main :

#include <windows.h>
#include "init_D3D.h"
#include "decl_init_D3D.h"
#include "tutor.h"
#include "decl_vect_matr.h"
#include "mesh.h"
#include "decl_mesh.h"
#include "decl_timer.h"

#define LONG_FENETRE 300
#define LARG_FENETRE 300

_mesh_ *mtm[8];
LONGLONG *temps;

if(( SUCCEEDED( InitD3D(hCtrl_1, LONG_FENETRE, HAUT_FENETRE, &obj_Direct3D, &obj_Direct3DDevice))
&&
SUCCEEDED( InitD3D(hCtrl_2, LONG_FENETRE, HAUT_FENETRE, &obj_Direct3D2, &obj_Direct3DDevice2))
) == E_FAIL)
return -1;

// vérifie présence de l'horloge de précision et initialise temps
if (!(temps = horloge())) return -1;

_module_ *module1 = new _module_;
_module_ *module2 = new _module_;

Téléchargez la source, cliquez ci-dessous :