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 :

choix fonction pour obtenir l'heure précise du système en ms


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 79
    Points : 45
    Points
    45
    Par défaut choix fonction pour obtenir l'heure précise du système en ms
    Bonjour ,
    je developpe actuellement un logiciel exigeant une heure précise à la milliseconde , après des recherches sur la MSDN , j'ai obtenu plusieurs fonctions donnant l'heure mais il n'est nulle part indiqué la précision ainsi que la rapidité.
    En effet , je souhaite lire l'heure toutes les dix millisecondes , il faut donc une fonction rapide.

    Voici les fonctions que j'ai trouvé :

    1\ La classe CTime ainsi que la fonction GetCurrentTime() : mais malheureusement il me semble que cette fonction ne renvoit pas les ms.

    2\ GetSystemTime() : cette fonction renvoie une structure SYSTEMTIME mais dans la msdn il y a un warning sur l'utilisation de ctte structure , voila ce qui est ecrit dans la msdn (je ne comprends pas)

    is not recommended that you add and subtract values from the SYSTEMTIME structure to obtain relative times. Instead, you should

    -Convert the SYSTEMTIME structure to a FILETIME structure.
    -Copy the resulting FILETIME structure to a LARGE_INTEGER structure.
    -Use normal 64-bit arithmetic on the LARGE_INTEGER value.

    Je ne comprends pas comment réaliser cette opération.

    Est ce quelqu'un peut m'indiquer la fonction la plus approprié pour effectué l'opération que je désire

    merci

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Salut

    Puisque tu as MSDN

    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
    23
    24
    SystemTimeToFileTime 
    This function converts a system time to a file time. 
     
    BOOL SystemTimeToFileTime( 
    const SYSTEMTIME *lpSystemTime, 
    LPFILETIME lpFileTime ); 
     
    typedef struct _FILETIME { // ft 
    DWORD dwLowDateTime; 
    DWORD dwHighDateTime; 
    } FILETIME; 
     
    typedef struct ULARGE_INTEGER {
    ULONGLONG QuadPart;
    } ULARGE_INTEGER;
    Members
    LowPart 
    Specifies the low-order 32 bits. 
    HighPart 
    Specifies the high-order 32 bits. 
    QuadPart 
    Specifies a 64-bit unsigned integer. 
    Remarks
    The ULARGE_INTEGER structure is actually a union. If your compiler has built-in support for 64-bit integers, use the QuadPart member to store the 64-bit integer. Otherwise, use the LowPart and HighPart members to store the 64-bit integer.
    Apparemment, il suffit de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ULARGE_INTEGER uliVal
    FILETIME ftVal;
    uliVal.LowPart  = ftVal. dwLowDateTime; 
    uliVal.HighPart  = ftVal.dwHighDateTime;
    Tu peux même peut-être faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcpy(&uliVal, &ftVal, sizeof(ULARGE_INTEGER));
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 79
    Points : 45
    Points
    45
    Par défaut
    salut
    en relisant la msdn je me suis apercu qu'il etais ecrit
    It is not recommended that you add and subtract values from the SYSTEMTIME structure to obtain relative times

    or lorsque l'on effectue une lecture simple de l'heure , ce n'est pas du relatif , je crois.Donc je peus peut etre utiliser directement la structure systemtime.

    merci

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Je ne comprends pas bien, veux-tu faire des opérations sur les durées ou simplement obtenir des instants très précis !
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 79
    Points : 45
    Points
    45
    Par défaut
    Excuse moi de ne pas avoir été très précis , je désire obtenir des l'heure précise sans faire de calcul.

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    J'ai malheureusement l'impression qu'on ne peux pas faire plus rapide que la fonction GetSystemTime
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    salut c'est le confrere d'a cote
    j'ai trouve ça sur msdn:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    /* TIMES.C illustrates various time and date functions including:
     *      time            _ftime          ctime       asctime
     *      localtime       gmtime          mktime      _tzset
     *      _strtime        _strdate        strftime
     *
     * Also the global variable:
     *      _tzname
     */
     
    #include <time.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/timeb.h>
    #include <string.h>
     
    void main&#40;&#41;
    &#123;
        char tmpbuf&#91;128&#93;, ampm&#91;&#93; = "AM";
        time_t ltime;
        struct _timeb tstruct;
        struct tm *today, *gmt, xmas = &#123; 0, 0, 12, 25, 11, 93 &#125;;
     
        /* Set time zone from TZ environment variable. If TZ is not set,
         * the operating system is queried to obtain the default value 
         * for the variable. 
         */
        _tzset&#40;&#41;;
     
        /* Display operating system-style date and time. */
        _strtime&#40; tmpbuf &#41;;
        printf&#40; "OS time&#58;\t\t\t\t%s\n", tmpbuf &#41;;
        _strdate&#40; tmpbuf &#41;;
        printf&#40; "OS date&#58;\t\t\t\t%s\n", tmpbuf &#41;;
     
        /* Get UNIX-style time and display as number and string. */
        time&#40; &ltime &#41;;
        printf&#40; "Time in seconds since UTC 1/1/70&#58;\t%ld\n", ltime &#41;;
        printf&#40; "UNIX time and date&#58;\t\t\t%s", ctime&#40; &ltime &#41; &#41;;
     
        /* Display UTC. */
        gmt = gmtime&#40; &ltime &#41;;
        printf&#40; "Coordinated universal time&#58;\t\t%s", asctime&#40; gmt &#41; &#41;;
     
        /* Convert to time structure and adjust for PM if necessary. */
        today = localtime&#40; &ltime &#41;;
        if&#40; today->tm_hour > 12 &#41;
        &#123;
       strcpy&#40; ampm, "PM" &#41;;
       today->tm_hour -= 12;
        &#125;
        if&#40; today->tm_hour == 0 &#41;  /* Adjust if midnight hour. */
       today->tm_hour = 12;
     
        /* Note how pointer addition is used to skip the first 11 
         * characters and printf is used to trim off terminating 
         * characters.
         */
        printf&#40; "12-hour time&#58;\t\t\t\t%.8s %s\n",
           asctime&#40; today &#41; + 11, ampm &#41;;
     
        /* Print additional time information. */
        _ftime&#40; &tstruct &#41;;
        printf&#40; "Plus milliseconds&#58;\t\t\t%u\n", tstruct.millitm &#41;;
        printf&#40; "Zone difference in seconds from UTC&#58;\t%u\n", 
                 tstruct.timezone &#41;;
        printf&#40; "Time zone name&#58;\t\t\t\t%s\n", _tzname&#91;0&#93; &#41;;
        printf&#40; "Daylight savings&#58;\t\t\t%s\n", 
                 tstruct.dstflag ? "YES" &#58; "NO" &#41;;
     
        /* Make time for noon on Christmas, 1993. */
        if&#40; mktime&#40; &xmas &#41; != &#40;time_t&#41;-1 &#41;
       printf&#40; "Christmas\t\t\t\t%s\n", asctime&#40; &xmas &#41; &#41;;
     
        /* Use time structure to build a customized time string. */
        today = localtime&#40; &ltime &#41;;
     
        /* Use strftime to build a customized time string. */
        strftime&#40; tmpbuf, 128,
             "Today is %A, day %d of %B in the year %Y.\n", today &#41;;
        printf&#40; tmpbuf &#41;;
    &#125;
    Output
    OS time: 21:51:03
    OS date: 05/03/94
    Time in seconds since UTC 1/1/70: 768027063
    UNIX time and date: Tue May 03 21:51:03 1994
    Coordinated universal time: Wed May 04 04:51:03 1994
    12-hour time: 09:51:03 PM
    Plus milliseconds: 279
    Zone difference in seconds from UTC: 480
    Time zone name:
    Daylight savings: YES
    Christmas Sat Dec 25 12:00:00 1993
    Today is Tuesday, day 03 of May in the year 1994.

    j'ai essaye ça fonctionne.

  8. #8
    mat.M
    Invité(e)
    Par défaut
    Bjr,
    sinon on peut utiliser queryPerformanceCounter mais qui n'est pas forcément disponible sur toutes les machines.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 50
    Points : 56
    Points
    56
    Par défaut
    Hello,

    Tu peux essayer GetTickCount() (voir le MSDN) qui te donne le nbre de ms comptées par le kernel windows.
    C'est une API windows, de mémoire.

    a+

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 34
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Pouvez-vous m'expliquer cette notion : "Zone difference in seconds from UTC: 480".

    J'ai vraiment du mal à comprendre.

    Merci Guillaume.

  11. #11
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par specialfox Voir le message
    Pouvez-vous m'expliquer cette notion : "Zone difference in seconds from UTC: 480".
    C'est le décalage horaire exprimé en secondes

    mais c'est vrai que 480 secondes, c'est pas beaucoup pour un décalage horaire, peut être 480 minutes (8 heures) ?
    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
    .

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Normalement, à part si tu peux mettre la main sur une carte matérielle synchronisée NTP/GPS avec un driver ultra-optimisé (ce qui est rare et cher), GetSystemTime sera la fonction la plus rapide, car demandant le moins de conversions pour obtenir l'heure utilisable. N'oublie pas, par contre, que cette heure n'est "correcte" que pour des calculs "purs", sans affichage... A 10 ms de période, afficher cette heure de façon continue serait un gouffre énorme en terme de performances !

    Toutefois, pour des calculs de delta de temps (en ms) et/ou pour des timestamps, GetTickCount() sera plus efficace normalement, ou éventuellement "ftime()" (timestamp Epoch + partie en millisecondes) si tu veux un timestamp absolu.


    Quant à "Zone difference in seconds from UTC: 480", ce sont bien des minutes (et non pas des secondes) pour le chiffre : c'est donc (480/60)=+8h par rapport au fuseau de Greenwich : farscape est donc censé être dans le fuseau horaire de Hong Kong...
    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

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 34
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Merci pour vos réponses, voilà j'utilise un logiciel NTPQuery, qui permet de récolter des informations sur un serveur NTP, et il y a encore des notions que je n'arrive pas à comprendre.

    1) GMT OFFSET (s)
    2) T1 Low
    3) T1 High

    Si une personne du forum peut éclairer ma lanterne.

    Merci.

    Guillaume
    Images attachées Images attachées  

Discussions similaires

  1. fonction pour obtenir le nombre d'enregistrement d'une table avec php
    Par chris0938 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 26/07/2010, 15h11
  2. [AC-2007] quelle type de champ utiliser pour obtenir un choix entre plusieurs chaînes
    Par David42000 dans le forum Modélisation
    Réponses: 2
    Dernier message: 09/07/2009, 16h21
  3. Réponses: 1
    Dernier message: 08/01/2007, 18h21
  4. Fonction/méthode pour obtenir l'IP de la machine
    Par sirex007 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 10/04/2003, 15h36

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