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 :

problème avec time.h


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut problème avec time.h
    salut ,
    j'ai un ptit problème
    en utilisant la bibliotèque time.h, j'arrive pas touver le temps écouler entre deux timers, elapsed est toujours égale à 0 malgrés qu'il devra etre au moins à 20 !!!!
    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <errno.h>
    #include <iostream>
    #include <time.h>
    int main(){
     
    clock_t timer, timer2;
    double elapsed;
    timer = clock();
    sleep(20);
    timer2 = clock();
    elapsed = ((double)timer2 - timer)/CLOCKS_PER_SEC;
    cout << elapsed << endl;
    }

  2. #2
    Membre régulier Avatar de inddzen
    Inscrit en
    Avril 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Avril 2004
    Messages : 133
    Points : 81
    Points
    81
    Par défaut
    Essaye de mettre une boucle genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i=0;i<1000000;i++);
    au lieu de sleep et tu auras un resultat....

    L'explication est toute simple : sleep "gèle" l'execution ton programme, d'où le fait que les deux valeurs timer et timer2 soient identiques et que elapsed=0.

    Sinon, si tu veux à tout prix utiliser sleep :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int main()
    {
     clock_t timer, timer2;
     double elapsed;
     time(&timer);
     sleep(10);
     time(&timer2);
     elapsed = ((double)timer2 - timer);
     std::cout << elapsed << std::endl;
    }
    Si le problème a une solution, il ne sert à rien de s'inquiéter. Mais s'il n'en a pas, alors s'inquiéter ne change rien.

    So Be en and Stay en

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    20 ms / CLOCKS_PER_SEC ça donne 0.
    (CLOCKS_PER_SEC vaut en général 1000000)

    Citation Envoyé par inddzen Voir le message
    sleep "gèle" l'execution ton programme, d'où le fait que les deux valeurs timer et timer2 soient identiques et que elapsed=0.
    Non non c'est juste que la valeur passée est trop faible : clock renvoit le temps écoulé depuis le lancement de l'application.

    MAT.

  4. #4
    Membre régulier Avatar de inddzen
    Inscrit en
    Avril 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Avril 2004
    Messages : 133
    Points : 81
    Points
    81
    Par défaut
    Rappel:

    Sleep suspend l'execution d'un process pour un nombre de secondes donné en argument.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned int sleep( unsigned int seconds );
    Si le problème a une solution, il ne sert à rien de s'inquiéter. Mais s'il n'en a pas, alors s'inquiéter ne change rien.

    So Be en and Stay en

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Hmm ok, j'avais lu Sleep et remarqué qu'il n'avait pas inclus unistd.h, je pensais donc que c'était du windows (Sleep sous windows prend des ms en argument)...

    Et il semble qu'en effet le temps s'arrête quand on endort le thread principal (je viens d'essayer avec g++ sous cygwin), ce qui me fait bien halluciner !
    En tous cas avec visual studio le temps continue de s'écouler, ce qui est a priori un peu plus logique mais je n'ai pas le standard sous la main pour vérifier le comportement théoriquement attendu...

    MAT.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    merci bcp pour vos réponses
    je vais l'essayer

Discussions similaires

  1. Problème avec Time stamp
    Par evannmatis dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/09/2011, 13h44
  2. [Batch] Problème avec %time%
    Par paselo dans le forum Scripts/Batch
    Réponses: 10
    Dernier message: 16/10/2010, 01h47
  3. [PHP-JS] problème avec time()
    Par maxtt dans le forum Langage
    Réponses: 14
    Dernier message: 31/07/2006, 04h12
  4. [MySQL 5 + Java] Problème avec un champ TIME
    Par ultracoxy dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 08/07/2006, 09h25
  5. Problème de time-out avec un socket client.
    Par Depteam1 dans le forum MFC
    Réponses: 3
    Dernier message: 17/10/2005, 10h30

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