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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 [TThread][TTimer] comment utiliser un timer dans un thread ?
    Bonjour

    J'ai un thread qui a dans son .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //...
    TTimer *Timer1;
    void __fastcall EventTimer1(TObject *Sender);
    //...
    dans le cpp
    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
    //...
    void __fastcall MyThread::Execute()
    {
    Timer1 = new TTimer(NULL);
    Timer1->Enabled=false;
    Timer1->OnTimer=EventTimer1;
    Timer1->Interval=100;
    //...
    Timer1->Enabled=true;
    }
     
    void __fastcall MyThread::EventTimer1(TObject *Sender)
    {
     stringlist1->Add(asValue);
    }
    et mon timer ne s'éxécute jamais. malgré que le thread existe pendant pret de 7 secondes.

    Afin de tester mon code j'avais ajouté :
    a la fin de la methode Execute, et j'avais bien 1 valeur dans mon StringList a la fin.

    donc comment faire pour que mon Timer fasse son job ?

    Merci a vous par avance

  2. #2
    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
    Je ne sais pas trop se que tu veut faire mais a priori on ne mais jamais de composant VCL dans un Thread, les composant son mis sur une fiche (même si ce ne sont pas des composants graphiques) ou a la limite dans une simple classe mais pas dans un Thread, par contre, grace à la fonction Synchronize du Thread, tu peut accéder au evenement du Timer que tu aura placé sur ta fiche.

    J'espère avoir été clair et ne pas trop mettre emélé

  3. #3
    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, suite a ta remarque j'ai repensé mon thread

    a la fin de Execute j'ai ajouté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fin=true;
    while(fin)
    {
    //code de mon Event
    Application->ProcessMessage();
    }
    et j'ai ajouté une methode public FinishThread
    il me reste quelques test a faire, mais ca fonctionne a priori

    netah

    merci pottiez

  4. #4
    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
    De rien, si tu as d'autre problemes tu sais ou venir

  5. #5
    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
    je m'en sors pas je vais donc poser une question générale sur les thread

    je vais pas rentrer dans les details, mais en gros j'ai une grosse class qui gere mon système.

    et dans une des méthodes j'ai besoin de faire une acquisition regulière de data.

    comment je dois faire ?

    disons que ma tache d'acquisition est la methode AcquData()

    il se trouve que cette méthode ralentit enormement mon execution.

    je fais un threads qui appel AcquData avec Synchronize ? je déplace AcquData dans mon thread ? autre ?


  6. #6
    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
    Les deux solution sont possible, tout dépend ou tu as besoin de ces infos, a prioris dans ta fiche, donc je la laisserai dans la fiche et je l'appelerai avec un Synchronize.

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