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++Builder Discussion :

Comment est géré l'événement OnTime du Composant TTimer?


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 35
    Par défaut Comment est géré l'événement OnTime du Composant TTimer?
    : En fait je voudrai savoir quels sont les prioritées d'execution lorsque l'on se trouve dans une methode, et qu'un événement OnTime et déclenché?

    Est-ce que le traitement en court se termine puis l'évenement OnTime est effectué?
    Ou est-ce, qu'au contraire (Ce qui me semble plus logique!), l'évement OnTime est effectué puis le programme reprend son traitement en court?

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Salut,

    je ne suis pas sur mon PC donc je n'ai pas accès à C++ Builder. Mais je pense que dans l'aide tu devrais pouvoir trouver ton bonheur.

    Au pire fait un test ! Tu lance une grosse boucle avec des sleep avec un bouton.
    Et tu met un autre bouton pour activer le timer...tu te débrouille pour que l'évenement OnTime se déclenche avant la fin de ta grosse boucle.

    Tu regardes ce qui se passe et tu auras ta réponse

    Bon courage et tiens nous au courrant, çà m'interesse aussi !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 21
    Par défaut
    Bonjour,

    Pour faire simple, si une de vos fonctions est en cours d'exécution et qu'un évènement quelconque (pas seulement un OnTime d'un TTimer, mais aussi un click d'un bouton, un OnChange d'un TEdit, un OnPaint ou je ne sais quoi d'autre) doit avoir lieu pendant l'execution de cette fonction, et bien ces évènements attendront leur tour !

    Pour faire plus compliqué, chaque évenement de la VCL se traduit par un message Windows qui se rajoute dans la file des messages (transparent dans la plupart des cas pour le programmeur Delphi ou C++Builder). Votre application les execute dans l'ordre, sans interrompre le traitement d'un message pour un traiter un autre.

    Néanmoins, si une de vos fonctions s'exècute pendant longtemps, un moyen simple (à utiliser avec précaution) pour permettre à votre application de traiter les autres évènements et de rajouter dans votre fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application->ProcessMessages();

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    BCB utilise les Timers mis en place à l'aide des API WINDOWS.
    Au niveau de BCB, le timeout n'est géré qu'au travers de messages WM_TIMER
    qui n'ont aucune priorité particulière vis à vis des autres messages.
    Il existe cependant une autre possibilité qui n'est pas prise en charge par BCB,
    et qui consisterait à utiliser une callback en lieu et place de la génération de
    l'événement WM_TIMER.

    The SetTimer function creates a timer with the specified time-out value.

    UINT SetTimer(

    HWND hWnd, // handle of window for timer messages
    UINT nIDEvent, // timer identifier
    UINT uElapse, // time-out value
    TIMERPROC lpTimerFunc // address of timer procedure
    );
    pTimerFunc

    Points to the function to be notified when the time-out value elapses.
    For more information about the function, see TimerProc.
    If lpTimerFunc is NULL, the system posts a WM_TIMER message to the application queue.
    The hwnd member of the message's MSG structure contains the value of the hWnd parameter.
    Voir à ce propos la rubrique Timers dans l'aide MS win32SDK ou avec GOOGLE faire
    une recherche : SetTimer, TimerProc... Voir aussi si cette callback n'est pas ralentie
    en arrière plan par le système lui-même !

    Autre solution de timer : bidouiller le MIDI... dont les interruptions sont plus
    proches de la tâche de fond sans quoi... il n'y aurait aucune fluidité dans l'écoute des
    fichiers MIDI!

    A plus !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 09/04/2010, 13h48
  2. [XP - VISTA] Comment est composée le registre de Windows ?
    Par kilian67 dans le forum FAQs Windows
    Réponses: 0
    Dernier message: 22/01/2009, 19h26
  3. Comment est financé developpez.com ?
    Par BuG dans le forum Evolutions du club
    Réponses: 9
    Dernier message: 19/06/2003, 11h03
  4. Réponses: 5
    Dernier message: 25/03/2003, 17h27

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