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

Visual C++ Discussion :

[VC++6]Heure avec centième / millième


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Vow
    Vow est déconnecté
    Membre éprouvé Avatar de Vow
    Inscrit en
    Janvier 2003
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 259
    Par défaut [VC++6]Heure avec centième / millième
    Bonjour

    Je développe (toujours) en C sous Visual C++ 6.
    Je cherche un moyen autre que faire une lib en Borland (via "struct time"), pour récupérer la date courante en centième de seconde (voire millième).

    Je ne pense pas que ça existe en "standard", donc je ne me fais pas d'espoir

    Merci d'avance.


    [€DIT (18h30)]
    Ou peut-être une fonction qui retourne la date/heure en millisecondes/centièmes ?
    [/€DIT]

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 470

  3. #3
    Vow
    Vow est déconnecté
    Membre éprouvé Avatar de Vow
    Inscrit en
    Janvier 2003
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 259
    Par défaut
    Merci.
    Mais justement, j'avais un peu tout essayé (sauf les classes, mais normal puisque ça n'existe pas en C...).

    Le problème avec la structure SYSTEMTIME est que les millisecondes se mettent à jour quand ils veulent. Ou plutôt lorsque la ligne de test n'est pas dans une boucle.

    Exemple : dans une boucle do-while (dans mon cas), je fais plusieurs fois appel à une fonction de trace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SYSTEMTIME st;
    GetLocalTime(&st);
    wprintf(L"%02d/%02d/%04d %02d:%02d:%02d,%04d\n", 
                                st.wDay, st.wMonth, st.wYear, 
                                st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
    Résultat (dans la boucle) :
    18/11/2008 11:23:30,0514
    18/11/2008 11:23:30,0514
    18/11/2008 11:23:30,0514
    ...
    18/11/2008 11:23:30,0514
    18/11/2008 11:23:31,0514
    18/11/2008 11:23:31,0514
    ...
    18/11/2008 11:23:31,0514
    18/11/2008 11:23:32,0514
    ...
    En sortant de la boucle, les millisecondes reviennent par magie.
    Même comportement avec une boucle for, d'après mes souvenirs.

    [€DIT]
    Ah oui, j'avais oublié de dire que ça se comportait aussi bizarrement avec une structure _timeb...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct _timeb tstruct;
    struct tm when;
     
    _tzset();
    _ftime( &tstruct );
    when = *localtime(&(tstruct.time)); 
    wprintf(L"%02d/%02d/%04d %02d:%02d:%02d,%04u\n", 
                                when.tm_mday, when.tm_mon, when.tm_year + 1900,
                                when.tm_hour, when.tm_min, when.tm_sec, tstruct.millitm);
    [/€DIT]

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Vérifie peut-être avec QueryPerformanceCounter() (la fonction la plus précise mise à disposition par Windows), mais je pense que c'est normal : Quand le thread possède le processeur, il peut faire plusieurs itérations en moins d'une milliseconde, puis perdre le processeur, faire à nouveau plusieurs itérations, etc.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Vow
    Vow est déconnecté
    Membre éprouvé Avatar de Vow
    Inscrit en
    Janvier 2003
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 259
    Par défaut
    Oui c'est sûr mais dans ce cas, en utilisant QueryPerformanceCounter (et QueryPerformanceFrequency), il s'agit plus d'un compteur que d'une heure exacte.
    Cela dit, ça peut m'aider même si je me fais plus ch... pour une simple fonction de temps

    De plus ce qui me génait dans les millisecondes dans l'exemple précédent, c'est que les secondes changeaient mais pas les millisecondes
    18/11/2008 11:23:30,0514
    18/11/2008 11:23:31,0514
    Ce changement de seconde se faisant toujours après la même fonction qui ne contient aucun Sleep de 1 sec
    Drôle d'exactitude si ce n'est pas un bug...

  6. #6
    Vow
    Vow est déconnecté
    Membre éprouvé Avatar de Vow
    Inscrit en
    Janvier 2003
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 259
    Par défaut
    Bon... Je suis un boulet
    Je n'avais pas vu le "Sleep(1000);" qu'avait rajouté un collègue...
    Bref, maintenant je sais pourquoi la fonction durait trop de temps

    Je vais clore ce sujet

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

Discussions similaires

  1. [phpMyAdmin] problème au niveau des heures avec phpMyAdmin
    Par arti2004 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 13/06/2006, 22h05
  2. heure avec centieme de seconde dans un etat
    Par petitours dans le forum Access
    Réponses: 17
    Dernier message: 28/01/2006, 21h05
  3. Insertion d'heure avec sql server
    Par 24 faubourg dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/12/2005, 17h55
  4. probleme date et heure avec mysql.
    Par argon dans le forum Langage SQL
    Réponses: 1
    Dernier message: 11/07/2005, 22h42
  5. Réponses: 3
    Dernier message: 13/08/2004, 18h52

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