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

Delphi Discussion :

Utilisation de timer


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 52
    Par défaut Utilisation de timer
    on veut faire un programme où on utilise une horloge comment utiliser un objet timer pour incrémenter cette horloge en temps réel .

  2. #2
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Tu poses un TTimer sur ta forme principale. Dans les propriétés de ce TTimer tu choisis l'intervalle de déclenchement en millisecondes avec la propriété Interval. Pour travailler tu vas dans le événements de ton TTimer : tu as OnTimer (tu double cliques dessus) qui est une procédure qui est déclenchée à chaque 'Interval' de ton TTimer

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Par défaut
    ça marche aussi en deposant un Ttimer sur ta fiche et en cliquant sur F1 par la suite

  4. #4
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Salut,

    Encore une fois tout dépend de ton projet.

    A première vue je répondrais:
    Tu définit une variable Temps que tu incrémente à chaque évènement "OnTimer".

    En revanche, je ne pense pas que l'objet timer soit idéal pour cette manipulation si tu souhaite une précision importante sur ton horloge. En effet un timer c'est un objet qui provoque un évènement toutes les X secondes. Mais comme tous les évènements, ton processus le gèrera dès qu'il en aura l'occasion (cf. processus et leurs priorités), donc le timer c'est idéal pour éffectuer un rafraîchissement par exemple, pas pour du temps réelle très précis.

    Si tu souhaite réaliser une horloge précise, tu devras avoir une approche multi-tâche temps réelle bien plus complexe, avec une OS temps réelle (genre µC/OS-II ), et des diagrammes d'état, chronnogramme des tâches...Afin de t'assurer que toutes tes tâches soient bien réaliser, avec leurs priorités propres (genre incrémenter l'horloge pour rester précis à la microseconde peut être ta tâche principale) sans famine. Je me rappelle que pour simplement recupérer des données sur un port série, les datées à la ms et les afficher à l'écran, on avait dû passer une vingtaine d'heure.
    Par exemple si tu utilise un timer système très précis et que tu déclenches une interruption, avec une priorité maximum, toutes les X secondes, ton horloge sera ultra-précise, mais si tes autres tâches prennent du temps alors tu auras quand même des erreurs de datation (puisque la majeur partie de ta CPU sera utilisée pour incrémenter l'horloge).

    Maintenant si c'est pour dater un dossier, l'heure système suffit.

    A+.

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Bonjour,

    A propos du timer, je confirme à toutes fins utiles qu'il n'est ni précis, ni fiable si l'on veut faire du chronométrage.

    Le hasard ayant voulu que je viens (15 mars 15heure et des poussières) de répondre à une question similaire sur le forum, je vous signale que vous pourrez y trouver un exemple de code qui permet de générer des chronomètres si l'on se contente d'une précision de l'ordre de la milli-seconde.

    Pour une précision plus serrée j'ai lu quelque part qu'il faut utiliser les fonctions de compteur hautes performances de l'API-Win32, c'est à dire notamment les fonctions :
    - QueryPerformanceFrequency : elle renvoie la fréquence (en hertz) du compteur haute précision de la machine
    - et QueryPerformanceCounter qui renvoie la valeur courante d'un compteur libre. Paraît que la résolution est souvent de l'ordre d'une nanoseconde (un milliardième de seconde) !!!. Comme c'est rare d'avoir besoin d'une telle précision et que je ne me souviens plus où j'ai mis ma source je m'en tiens à cette simple indication mais si le sujet vous intéresse, faites moi signe et je fouillerai pour vous trouver un bout de code.

    C'a-y-est j'ai retrouvé en voici un
    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
     
    type cChrono = object
                           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 milliSecondes plus toutes les décimales
                           procedure Top;
                           function  Mis : shortString; // chaine temps passé depuis Chrono.Top
                         end;
     
    procedure cChrono.Top;
    begin     if not QueryPerformanceFrequency(FFrequency)
              then raise Exception.Create('Pas de compteur hautes performances.');
              QueryPerformanceCounter(FStart) ;
    end;
     
    function  cChrono.Mis : shortString; 
    begin     QueryPerformanceCounter(FStop) ;
              FElapsed := (FStop-FStart)/FFrequency ; // Durée captée, en secondes.
              FElapsed := FElapsed * 1000;            // Durée finale, en ms avec n décimales.
              Result:=floatToStr(FElapsed)+' ms';
    end;
     
    // Puis pour l'utilisation :
    var monChrono1,monChrono2 : cChrono;
    // Ensuite au début du truc à chronométrer :
    monChrono1.Top; // lance le top-départ
    ici la suite du code ...
    // Et enfin pour afficher le temps écoulé par exemple :
    Showmessage(monChrono1.Mis); end;
    :
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  6. #6
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    Citation Envoyé par Gilbert Geyer
    Pour une précision plus serrée j'ai lu quelque part
    Peut-être dans la http://delphi.developpez.com/faq/?pa...ometrageprecis

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Re-bonjour,

    Effectivement, ce n'est pas "peut-être" c'est effectivement le cas mais je ne m'en souvenais que d'une seule chose c'est que j'en avais récupéré un copier-coller pour cas de besoin. A force de consulter divers sites on finit par s'embrouiller!! Bon l'essentiel est que celui qui a posé la question ait un bout de code pour continuer car y'a rien de plus agaçant que d'être bloqué quand on veut avancer.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 8
    Par défaut
    Bonjour


    Je debute et souhaiterais utiliser ce code mais souhaiterais savoir où mettre cette partie de code car je ne sais pas. je pensais dans la declaration de type mais cela ne fonctionne pas l erreur 'attendu end' s affiche'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    type cChrono = object
                           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 milliSecondes plus toutes les décimales
                           procedure Top;
                           function  Mis : shortString; // chaine temps passé depuis Chrono.Top
                         end;
    merci de votre aide

Discussions similaires

  1. utilisation des timers
    Par iwio dans le forum Allegro
    Réponses: 1
    Dernier message: 25/06/2006, 23h55
  2. Utilisation de Timer dans Python
    Par aliassaf dans le forum Général Python
    Réponses: 5
    Dernier message: 17/06/2006, 19h06
  3. [C#.net] utiliser un timer
    Par Mandalar dans le forum DirectX
    Réponses: 4
    Dernier message: 26/01/2006, 22h17
  4. Utiliser un timer dans une application console
    Par chavers dans le forum Langage
    Réponses: 8
    Dernier message: 25/05/2005, 14h07
  5. Utilisation de Timer
    Par Freakazoid dans le forum DirectX
    Réponses: 1
    Dernier message: 07/07/2004, 23h27

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