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 :

[TThread][TTimer] comment utiliser un timer dans un thread ?


Sujet :

C++Builder

  1. #21
    Membre Expert
    Avatar de netah25
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    3 233
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 233
    Par défaut
    Merci DjmSoftware !

    Je vais essayer de remodeler mon programme autour de cette class.

    Par contre pour que ca compil j'ai du faire la modification suivante :

    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
    void __fastcall TMyTimerThread::Execute()
    {
         // TRACE("Methode Name " << "TMyTimerThread::Execute() " << "Id "  << this->ThreadID << " Entry at  " <<__TIME__);
        Priority = FThreadPriority;
       while(!Terminated)
        {
           if  (FEnabled)
           {
           	 WaitForSingleObject(MyHandle,FInterval);
             if (!Terminated)  Synchronize(&Timer);
             }
            else
            {
             ResetEvent(MyEvent);
             WaitForSingleObject(MyEvent,INFINITE);
            }
     
        }
     
     
        //---- Placez le code du thread ici ----
        // TRACE("Methode Name " << "TMyTimerThread::Execute() " << "Id "  << this->ThreadID << " Exit at  " <<__TIME__);
    }
    voila, merci encore et je vous dit si je m'en sort ...

    netah

  2. #22
    Membre Expert
    Avatar de netah25
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    3 233
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 233
    Par défaut
    Bon, ton composant fonctionne tres bien ...

    mais je pense que le probleme viens de mon code d'acquisition, il me bloque tous ...

    c'est un peut comme si j'avais un Sleep(300) pendant ce temps la impossible de faire executer mon autre TimerThread a 50 ms

    je vais essayer de trouver une feint pour ameliorer mon code d'acquisition ...

    sauf si vous avez une idée...

    netah

  3. #23
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Bin c'est ton code d'acquisition qu'il faudrais mettre dans un Thread, celui ci serai toujours en train d'acquerir des données, est lorsque tu en as besoin d'une tu récupere la derniere acquisition.

  4. #24
    Membre Expert
    Avatar de netah25
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    3 233
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 233
    Par défaut
    Citation Envoyé par pottiez
    Bin c'est ton code d'acquisition qu'il faudrais mettre dans un Thread, celui ci serai toujours en train d'acquerir des données, est lorsque tu en as besoin d'une tu récupere la derniere acquisition.
    bah c'est bien ce que j'essaie de faire ...

    mais je galere pas mal

  5. #25
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    En fait, pour que ca fonctionne, tu doit avoir ton code d'acquisition dans ton thread, pas dans une autre classe ou ton thread va appeller la fonction.
    Ensuite si ta fiche, ou le reste de ton application ne fait que afficher les acquisition et rien d'autre forcément, ca parétra toujours long, le seul truc que le Thread améliorera, c'est que si tu appuis sur un bouton l'appliquation réaira instentanement plutot que d'attendre une acquisition, mais la tu as un Timer à faire tourné en même temps, donc tu devrais voir le Timer fonctionner en meme temps que le Thread, ensuite l'acquisition dans le thread doit se faire en boucle, ce ne doit pas etre une fonction dans le Thread que ta classe appelle a chaque fois, ton thread fais les acqui en boucle, range la derniere dans une variable, et dans la classe Thread tu as une fonction qui permet aux autre classe de lire la variable, du genre :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    float TThread::LireVariable(void)
    {
      return maVariable ;
    }

  6. #26
    Membre Expert
    Avatar de netah25
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    3 233
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 233
    Par défaut
    ok j'essaie ca .

  7. #27
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    bonjour
    n'a tu pas la possibilité de modifier ton code d'acquisition pour qu'il travaille avec des <Event win32>
    il est possible sous Win32 d'utiliser la lecture sur les ports sérielle en mode asynchrone, un Event est automatiquement généré dès que par exemple un caractère se trouve dans le buffer de réception

    ton code d'acquisition à l'intérieur d'un Thread utilise les fonctions <Wait forSingleEvent>, ainsi ton code n'utilise pratiquement pas de resources systèmes
    dans le corps de ta fonction d'acquisition tu peux générer des messages <PostMessage>également en mode synchrone qui seront traités dans ton application principale

    j'ai écrit un tuto qui travaille selon ce principe
    http://djmsoftware.developpez.com/PrintMonitor

    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

Discussions similaires

  1. comment utiliser les lock dans les threads ?
    Par skad dans le forum Général Python
    Réponses: 2
    Dernier message: 15/07/2008, 14h28
  2. comment utiliser un Timer dans ma methode rpc
    Par groupe dans le forum GWT et Vaadin
    Réponses: 7
    Dernier message: 01/07/2008, 15h01
  3. comment acceder à un timer dans un thread?
    Par Jayceblaster dans le forum Windows Forms
    Réponses: 1
    Dernier message: 26/07/2007, 09h04
  4. Réponses: 4
    Dernier message: 16/02/2006, 16h28
  5. Utiliser un timer dans une application console
    Par chavers dans le forum Langage
    Réponses: 8
    Dernier message: 25/05/2005, 14h07

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