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

Langage Delphi Discussion :

Comment faire un chronomètre en Delphi ou ASM ?


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    juin 2005
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2005
    Messages : 39
    Points : 33
    Points
    33
    Par défaut Comment faire un chronomètre en Delphi ou ASM ?
    Bonjour à tous!
    Je cherche un moyen simple de réaliser un chronomètre, soit en pascal soit en assembleur, peu importe. Si quelqu'un aurait une idée sur la chose ça me dépannerait pas mal...

    Merci d'avance

  2. #2
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 613
    Points : 667
    Points
    667
    Par défaut
    Trois labels, deux boutons et un timer.
    A chaque seconde, le timer ajoute 1 à un label.
    Lorsque ce label arrive à 60, il ajoute un à celui d'à côté.
    Ainsi de suite.

    Un bouton pour activer le timer, un bouton pour l'arrêter.
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  3. #3
    Membre habitué
    Inscrit en
    décembre 2004
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : décembre 2004
    Messages : 188
    Points : 143
    Points
    143
    Par défaut
    Méfiance quand même si tu veux un peu de précision car avec certains système d'exploitation les timers sont très imprécis (voir aléatoires), j'avais constaté ca avec W98.

  4. #4
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 613
    Points : 667
    Points
    667
    Par défaut
    Citation Envoyé par Alfred12
    Méfiance quand même si tu veux un peu de précision car avec certains système d'exploitation les timers sont très imprécis (voir aléatoires), j'avais constaté ca avec W98.
    Sans blague ?
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  5. #5
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Citation Envoyé par MD Software
    Sans blague ?
    Je l'ai moi aussi toujours entendu dire, et par des gens sérieux 8) . Mais on tourne le pb si le Timer, au lieu de simplement incrémenter une variable, va lire l'horloge système.

    Roland
    Roland

  6. #6
    Membre habitué
    Inscrit en
    décembre 2004
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : décembre 2004
    Messages : 188
    Points : 143
    Points
    143
    Par défaut
    J'avais fait ce genre de bout de code pour vérifier la précision des timers.
    Renvoie l'écart entre deux appels en millisecondes.

    Sous W98 il pouvait y avoir des écarts importants (genre 750 millisecondes pour 1000), sous NT ca allait mieux, et sous XP j'ai pas testé vu que c'est un vieux truc.

    En tous cas, mieux vaut ne pas faire de temps réel avec çà !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure DeltaTimer : integer;
    var
         lNewTimer : TSystemTime;
    begin
         { Temps écoulé entre deux appels timer, pour vérification }
         GetSystemTime(lNewTimer);
         Result := lNewTimer.wMilliseconds - FOldTimer.wMilliseconds
                      + (lNewTimer.wSecond - FOldTimer.wSecond) * 1000
                      + (lNewTimer.wMinute - FOldTimer.wMinute) * 60000;
         FOldTimer := lNewTimer;
    end;
    D'ailleurs il est presque fini ton chrono avec çà...

  7. #7
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juin 2003
    Messages : 613
    Points : 667
    Points
    667
    Par défaut
    De toute façon, je le rappelle, il n'est pas possible de faire du temps réel [du vrai] avec un processeur avec mémoire cache.

    Mais dans le cas de PoOky, je pense que l'écart est acceptable. A toi de voir PoOky.
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  8. #8
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 47
    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
    Extrait d'une QR pour la prochaine FAQ :
    Utiliser les fonctions de compteur hautes performances (CHP) de l'API Win32 : fonctions QueryPerformanceFrequency et QueryPerformanceCounter (Windows.pas).
    La première renvoie la fréquence (en hertz) du compteur HP de la machine, la seconde renvoie la valeur courante d'un compteur libre. La résolution est souvent de l'ordre d'une nanoseconde (un milliardième de seconde).

    Déclarez ces variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Var
       FFrequency    : Int64    ;    // Fréquence du compteur hautes performances.
       FStart, FStop : Int64    ;    // Valeurs du compteur au début et à la fin du chrono.
       FElapsed      : Extended ;    // Durée finale, en secondes.
    Pour effectuer le chronométrage lui-même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Initialisation du compteur hautes performances, et début du chronométrage.
    If Not QueryPerformanceFrequency(FFrequency) Then
       Raise Exception.Create('Pas de compteur hautes performances.');
    QueryPerformanceCounter(FStart) ;
     
    // Insérer ici l'opération à chronométrer, ou un appel de fonction.
     
    // Fin de chronométrage, conversion du temps écoulé en secondes.
    QueryPerformanceCounter(FStop) ;
    FElapsed := (FStop-FStart)/FFrequency ;
    La résolution de ce compteur est en général très élevée : il n'est pas rare que ce soit la fréquence du processeur qui serve de base.
    Sur un système donné, elle ne change jamais, mais elle varie d'un système à un autre : il est donc impératif de toujours récupérer la fréquence par un appel au système. Cet appel peut n'être fait qu'une seule fois dans le programme.
    De même, certaines machines ne possèdent pas ce compteur : il est donc nécessaire également de tester le retour de QueryPerformanceFrequency (les tests ultérieurs peuvent souvent être omis, car ils n'échouent normalement jamais si l'obtention de la fréquence a réussi la première fois).

    Liens :
    MSDN : QueryPerformanceFrequency et QueryPerformanceCounter
    J'obtiens une précision de 0.3 nanosecondes sur ma machine, par exemple. Le délai de "clic" de ton bouton est au moins cent fois plus important... Avantage, c'est facilement automatisable (le code ci-dessus en est la preuve).
    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

  9. #9
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 47
    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
    Citation Envoyé par Alfred12
    J'avais fait ce genre de bout de code pour vérifier la précision des timers.
    L'horloge système est normalement plutôt juste, car synchronisée sur la RTC (horloge temps réel) de ta carte mère.

    Mais les timers Windows (TTimer en Delphi) sont pilotés par des messages Windows : faut pas vraiment t'étonner s'ils ne sont pas précis... D'ailleurs, ils ne sont pas faits pour ça non plus.
    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

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

Discussions similaires

  1. [LabVIEW 8.5][Débutant] Comment faire un chronomètre ?
    Par geoffrey.ru dans le forum LabVIEW
    Réponses: 2
    Dernier message: 08/09/2011, 18h31
  2. Comment faire un 'gameloop' dans delphi + VCL
    Par Maverick357 dans le forum Débuter
    Réponses: 6
    Dernier message: 01/10/2009, 21h14
  3. comment faire un organigramme avec delphi
    Par bambi98 dans le forum Composants VCL
    Réponses: 8
    Dernier message: 09/06/2009, 17h35
  4. Comment faire une temporisation sous Delphi ?
    Par vodasan dans le forum Langage
    Réponses: 8
    Dernier message: 17/09/2007, 12h29
  5. Comment faire un chronomètre ?
    Par adn013 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 16/08/2007, 17h52

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