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 :

Peut-t-on atteindre la µs en C++?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Par défaut Peut-t-on atteindre la µs en C++?
    Bonjour,
    Actuellement je travail sous Qt et j'utilise la classe QTime mais celle -ci ne gére au maximum les milli-secondes ms . Est ce qu'il existe une librairie en C++ (ou même en C ) qui permette d'utiliser des temps et des timers gérant la micro seconde µs?

    Merci d'avance pour votre réponse.

  2. #2
    Membre très actif

    Inscrit en
    Juillet 2008
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 186
    Par défaut
    Bonjour,

    Il existe gettimeofday en C, pour Linux (POSIX), et Windows propose QueryPerformanceCounter.

    Didier

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Mais bon, faut pas rêver. Les OS classiques ne permettent pas de descendre à une telle précision.

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    HPET ça fournit une précision de l'ordre de 100 nanosecondes, et c'est supporté par Windows (Vista, 2008), Mac OS X et Linux...

  5. #5
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Par défaut
    Tout depend ce que tu veux faire :

    Si il s'agit de declencher periodiquement un evenement avec un intervalle de temps tres court (ms ou plus petit) les OS classiques ne le permettent pas : en dessous d'un certain seuil ce n'est pas possible, et sinon il y a toujours une marge d'erreur (pouvant etre assez grande : selon ce que l'OS est en train de faire, le Timer peut se declencher avec plusieurs ms, voire plusieurs dizaines de ms de retard)

    Si il s'agit de "chronometrer" le temps ecoulé entre deux instants, tous les processeurs modernes permettent d'acceder à des compteurs extrement precis : compteur de temps, compteur de nb de cycles... et les OS modernes permettent de lire ces compteurs, on peut donc mesurer du temps de façon tres precise (QueryPerformanceCounter sous windows)

    Pour ce qui est du HPET, ça ne marche que sur les OS tres recents :wikipedia

    Enfin, une technique couramment utilisée pour pallier à ces soucis lorsque l'on souhaite declencher des evenements de façon precise, par exemple dans un jeu vidéo, lorsque le joueur appui sur une fleche, on doit deplacer le personnage de 50px toutes les 10ms :

    - On crée un timer declenché toutes les 10ms
    - A chaque fois que le timer est declenché, on lit un compteur tres precis (QueryPerformanceCounter par exemple) et on calcule le temps ecoulé depuis la derniere fois, on a :
    deltaT = t2-t1
    = 8ms parfois
    = 12ms parfois
    - on calcule le deplacement du joueur avec cette valeur :
    deltaPx = (50px / 10ms) * deltaT

    ainsi, meme si le personnage a l'ecran n'est pas réélement deplacé toutes les 10ms, la vitesse à laquelle il se deplace est constante et est bien celle voulue.

  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
    Sous windows, l'api propose la fonction QueryPerformanceCounter() pour les mesures de temps précises.

    A partir de ça tu peux avoir ce que tu demandes, mais attention aux subtilitées : http://support.microsoft.com/?scid=k...72338&x=17&y=5

    Il y a aussi potentiellement des problèmes avec les processeurs multicores. Je recommande la lecture du code qu'utilises Ogre pour ajuster l'information du temps : http://ogre.svn.sourceforge.net/view.../OgreTimer.cpp

Discussions similaires

  1. question (peut-être idiote) sur les vues
    Par LadyArwen dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/03/2003, 10h35
  2. comment peut se servire d'une Api en delphi
    Par maamar dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 22/02/2003, 10h31
  3. Peut on tester l'existence d'un fichier ?
    Par Alamassepointcom dans le forum Flash
    Réponses: 2
    Dernier message: 10/10/2002, 12h10
  4. Créer une fenêtre flottante qui ne peut avoir le focus
    Par BestofMac dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 10h46
  5. Un Sender peut-il s'auto-détruire lors d'un onClick?
    Par Flo. dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/07/2002, 10h31

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