NEO ::: TEAM
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

NEO ::: TEAM

New Evolution Owner
 
AccueilRechercherDernières imagesS'enregistrerConnexion
Le deal à ne pas rater :
AliExpress : Nouveaux codes promo (8€, 20€, 30€, 50€…)
Voir le deal

 

 Comment effectuer des chronométrages précis ?

Aller en bas 
AuteurMessage
Admin
Fondateur
Fondateur
Admin


Nombre de messages : 197
Age : 40
Localisation : Tlemcen ( Algérie )
Date d'inscription : 04/12/2006

Comment effectuer des chronométrages précis ? Empty
MessageSujet: Comment effectuer des chronométrages précis ?   Comment effectuer des chronométrages précis ? Icon_minitimeJeu 18 Jan - 16:32

[url=#chronometrageprecis]Comment effectuer des
chronométrages précis ?[/url]

Pour le faire, il faut utiliser les fonctions de compteur hautes performances
(CHP) de l'API Win32.
Il s'agit entre autres des fonctions
QueryPerformanceFrequency et QueryPerformanceCounter
(Windows.pas).
La première renvoie la fréquence (en hertz) du compteur HP de
la machine et la seconde renvoie la valeur courante d'un compteur libre. La
résolution est souvent de l'ordre d'une nanoseconde (un milliardième de
seconde).

Déclarez ces variables :


Code:



Var
  FFrequency    : Int64    ;    // Fréquence du compteur hautes performances.
  FStart, FStop : Int64    ;    // Valeurs du compteur au début et à la fin du chrono.
  FElapsed      : Extended ;    // Durée finale, en secondes.


Pour effectuer le chronométrage lui-même :


Code:



// Initialisation du
compteur hautes performances, et début du chronométrage.
If Not QueryPerformanceFrequency(FFrequency) Then
  Raise Exception.Create('Pas de compteur hautes performances.');
QueryPerformanceCounter(FStart) ;

// Insérer ici l'opération à chronométrer, ou un appel de fonction.

// Fin de chronométrage, conversion du temps écoulé en secondes.
QueryPerformanceCounter(FStop) ;
FElapsed := (FStop-FStart)/FFrequency ;

[center]La résolution de ce compteur est en général très élevée : il n'est pas rare que
ce soit la fréquence du processeur qui serve de base. Sur un système donné, elle
ne change jamais, mais elle varie d'un système à un autre : il est donc
impératif de toujours récupérer la fréquence par un appel au système. Cet
appel peut n'être fait qu'une seule fois dans le programme. De même, certaines
machines ne possèdent pas ce
compteur : il est donc nécessaire également de tester le retour de
QueryPerformanceFrequency (les tests ultérieurs peuvent souvent être
omis, car ils n'échouent normalement jamais si l'obtention de la fréquence a
réussi la première fois).

Si la version de Delphi utilisée ne déclare pas
ces fonctions, insérer ces déclarations dans le code :


Code:



Uses Windows ;

// Requiert Delphi 4 ou supérieur, ou de réimplémenter des entiers 64 bits.
function QueryPerformanceCounter(var lpPerformanceCount: TLargeInteger):
BOOL; stdcall; external kernel32 name 'QueryPerformanceCounter';
function QueryPerformanceFrequency(var lpFrequency: TLargeInteger): BOOL;
stdcall; external kernel32 name 'QueryPerformanceFrequency';


[/center]
Revenir en haut Aller en bas
https://neo-team.forumactif.com
 
Comment effectuer des chronométrages précis ?
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Comment cacher les scrollbars ?
» Comment changer la couleur d'un TProgressBar ?
» Comment copier un fichier ?

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
NEO ::: TEAM :: Informatique :: Les RADs :: Borland Delphi 4,5,6,7-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser