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

C++ Discussion :

std::clock() vs GetTickCount()


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �prouv�
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    1 299
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 1 299
    Par d�faut std::clock() vs GetTickCount()
    Bonjour, je suis en train de me faire un chrono sachant que mon code doit �tre portable sous windows et linux.

    J'ai vu qu'il existait std::clock(). C'est tr�s bien, cela me convient. De plus je crois que boost utilise std::clock() (cf http://www.boost.org/doc/libs/1_42_0/boost/timer.hpp)

    sous visual, il y a la fonction GetTickCount(). Y a-t-il un int�r�t � utiliser cette fonction par rapport � std::clock() ? Sauf erreur de ma part, GetTickCount() n'est pas portable...

    Alors je me suis fait une classe Chrono, qui fait qqch du genre

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    #if defined (_WINDOWS)
    utiliser GetTickCount()
    #else
    utiliser std::clock()
    #endif
    mais bon, quel int�r�t y a-t-il � utiliser GetTickCount() ?

    Merci d'avance

  2. #2
    Invit�
    Invit�(e)
    Par d�faut
    Citation Envoy� par salseropom Voir le message
    mais bon, quel int�r�t y a-t-il � utiliser GetTickCount() ?
    Merci d'avance
    Pas beaucoup, quand on peut utiliser QueryPerformanceCounter.

  3. #3
    R�dacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en s�curit�
    Inscrit en
    Mai 2007
    Messages
    11 517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Consultant en s�curit�
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par d�faut
    Citation Envoy� par ponce Voir le message
    QueryPerformanceCounter.
    QueryPerformanceCounter, c'est aussi Windows, donc la portabilit� :

    Au fait, quelle est la pr�cision de QueryPerformanceCounter(). Est ce que c'est r�ellement plus pr�cis (en r�solution r�elle, pas en affichage) que GetTickCount() ?
    Raymond
    Vous souhaitez participer � la rubrique R�seaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs syst�me et r�seau � configurer leurs �quipements SNMP r�seau.
    e-verbe Un logiciel de conjugaison des verbes de la langue fran�aise.

    Ma page personnelle sur DVP
    .

  4. #4
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Au fait, quelle est la pr�cision de QueryPerformanceCounter(). Est ce que c'est r�ellement plus pr�cis (en r�solution r�elle, pas en affichage) que GetTickCount() ?
    Attention de bien distinguer r�solution et pr�cision.
    QueryPerformanceCounter a une excellente r�solution (on est bien en dessous de la milliseconde) mais une pr�cision horrible sur certaines plateformes (on a parfois des sauts al�atoires de plusieurs millisecondes).
    En ce qui concerne GetTickCount c'est tout l'inverse : une r�solution de l'ordre de plusieurs dizaines de millisecondes, mais une bonne pr�cision.

    Un bon compromis sous Windows est timeGetTime.

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    D�tails du profil
    Informations personnelles :
    �ge : 51
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par d�faut
    Citation Envoy� par Laurent Gomila Voir le message
    QueryPerformanceCounter a une excellente r�solution (on est bien en dessous de la milliseconde)
    Voire bien en dessous de la NANOseconde...

    Citation Envoy� par Laurent Gomila Voir le message
    mais une pr�cision horrible sur certaines plateformes (on a parfois des sauts al�atoires de plusieurs millisecondes).
    J'ai souvent constat� ce probl�me sur les machines "pas ch�res", avec des circuits "tout-en-un" � l'int�rieur, qui impl�mentent la fonction hardware de fa�on un peu pourrie apparemment. On a �galement la farce avec les modes d'�conomie d'�nergie qui se d�clenchent pendant les mesures (merci les portables...).

    Par contre, sur une machine un minimum d�cente, et sans fonctions d'�conomie d'�nergie en cours, la r�solution tout comme la pr�cision sont souvent strictement celles du quartz du CPU... Donc, m�me s'il y a un jitter, le CPU s'est pris tr�s exactement le m�me dans les dents, et cela compense la mesure.

    De mani�re g�n�rale, si la r�solution donn�e par QueryPerformanceFrequency est de l'ordre de la fr�quence du CPU, il y a de bonnes chances d'avoir un QPC de bonne qualit�. Sinon, il vaut mieux s'en m�fier et proposer une alternative.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au s�rieux, de toutes fa�ons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum ad�quat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  6. #6
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Ao�t 2004
    Messages
    1 717
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 1 717
    Par d�faut
    Le multicore a un impacte parceque th�oriquement chaque thread peu changer de core au bon vouloir de l'OS, sauf si on pr�cise l'affinit� du thread. Les cores ayant des valeurs de ticks diff�rents, �a pose des problemes "louches" sur la plupart des ordinateurs aujourd'hui quand on utilise QueryPerformanceCounter();

    Du coup, personellement, pour me simplifier la vie, et avoir du code cross-platform et maintenu, j'utilise la classe Ogre::Timer du moteur 3D Ogre (impl�ment�e s�par�ment pour chaque os) qui contient d�j� pas mal de code pour g�rer les cas fourbes. (exemple pour la version windows : http://ogre.svn.sourceforge.net/view...48&view=markup )

    Vu que Ogre est sous licence MIT maintenant (ou plutot a partir de la prochaine release), je me g�ne pas pour r�cup�rer ce code.

Discussions similaires

  1. Clock skew detected.........:(
    Par bountykiller dans le forum C
    R�ponses: 2
    Dernier message: 03/06/2004, 21h46
  2. Sauvegarde std::vector dans un .ini
    Par mick74 dans le forum MFC
    R�ponses: 2
    Dernier message: 12/05/2004, 13h30
  3. Recherche "�toil�e" avec std::set
    Par guejo dans le forum MFC
    R�ponses: 2
    Dernier message: 06/05/2004, 13h28
  4. std MFC
    Par philippe V dans le forum MFC
    R�ponses: 7
    Dernier message: 17/01/2004, 00h54
  5. STL : std::set probl�me avec insert ...
    Par Big K. dans le forum MFC
    R�ponses: 13
    Dernier message: 08/11/2003, 01h02

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