IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[MFC] : CTime ? Calcul de temps d'éxécution


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 50
    Par défaut [MFC] : CTime ? Calcul de temps d'éxécution
    bonjour,

    voilà j'ai besoin d'évaluer différents temps d'éxécution de l'ordre de la µs ou de la milliseconde dans mon programme. je voulais savoir comment faire pour retourner l'heure courante précise à la milli ou a la micro seconde...
    La classe CTime est elle exécutable?
    Merci d'avance

  2. #2
    Membre confirmé

    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2002
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 216
    Par défaut
    oui on oeut utiliser CTime::GetAsSystemTime qui renvoie une structure SYSTEMTIME ou les infos sont à la milliseconde (voir aide MSDN)
    sinon la fonction clock() qui renvoie un nombre de ticks donnés au momment de l'appel , il suffit de la rappeller et faire la difference avec le premier appel et l'on obtiens le temps écoulé en millisecondes

  3. #3
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    On peut aussi utiliser GetThreadTime de l'API WINDOWS

  4. #4
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 50
    Par défaut
    en fait je suis sous Pocket PC avec eVC++ donc pas de fonction clock() et la méthode GetAsSystemTime me retourne des valeurs nulles a chaque fois pr les millisecondes.
    Quant à la méthode GetThreadTime je ne vois pas comment l'utiliser...

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    sinon, tu peux utiliser QueryPerformanceCounter & QueryPerformanceFrequency (détails dans msdn)

  6. #6
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 50
    Par défaut
    merci je v voir si je m'en sors avec ca...

  7. #7
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 50
    Par défaut
    salut

    j'essaie d'utiliser les fonctions QueryPerformanceCounter et QueryPerformanceFrequency mais après un petit calcul il me retourne toujours comme temps d'éxécution.
    Je fais mon test sur une boucle vide de for:
    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
     
                    LARGE_INTEGER	Freq;
    	LARGE_INTEGER	Start;
    	LARGE_INTEGER	Stop;
     
    	QueryPerformanceFrequency(&Freq);
     
    	QueryPerformanceCounter(&Start);
    	for (int i = 0 ; i < 10000 ; i++)
    	{
    	}
    	QueryPerformanceCounter(&Stop);
     
    	_int64 iFreq;
    	_int64 iStart;
    	_int64 iStop;
     
    	iFreq = (_int64) Freq.QuadPart;
    	iStart = (_int64) Start.QuadPart;
    	iStop = (_int64) Stop.QuadPart;
    	float fResult;
    	fResult = (iStop - iStart)/iFreq;
    Pourtant les valeur iFreq, iiStart et iStop ne sont pas nulles.

    Merci du petit coup de main si vous voyez un truc

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    à mon avis, la boucle for est executée trop rapidement
    essaie de la remplacer par un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	DWORD a = GetTickCount();
    	DWORD b = GetTickCount();
    	while (b-a<2000)
    		b = GetTickCount();

  9. #9
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 50
    Par défaut
    ouais mais le truc c que pr l'instant je fais un test avec une boucle for mais par la suite le bout de code à évaluer sera plus complet...
    Et puis de toute façon, mes valeurs retournées par les fonctions ne sont pas nulles donc je me demande si mon pb ne vient de mon calcul de temps ou de la conversion _int64 / float ...

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    c'est normal que ca te donne zéro, car le type LARGE_INTEGER est un entier, il faut malheureusement se risquer à une conversion pour avoir autre chose que des entiers
    entier / entier => entier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	__int64 tdeb = (__int64)Start.QuadPart;
    	__int64 tfin = (__int64)Stop.QuadPart;
    	double temps = ((double)tfin-tdeb) / (double)Freq.QuadPart;

  11. #11
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 50
    Par défaut
    trop bien!!
    merci beaucoup tu peux pas savoir comme ca me soulage d'un poids

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. calculer le temps d'éxécution d'une fonction
    Par phpines dans le forum Général Python
    Réponses: 3
    Dernier message: 09/04/2013, 09h47
  2. [XL-2003] Calculer le temps d'éxécution
    Par zangaloni dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/06/2011, 10h22
  3. temps d'éxécution et ressources
    Par Tchinkatchuk dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 12/04/2005, 09h11
  4. calculer le Temp écoulé
    Par ada_b dans le forum SQL
    Réponses: 1
    Dernier message: 30/11/2004, 09h44
  5. Réponses: 8
    Dernier message: 18/09/2002, 03h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo