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 :

Exécution d'un thread


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 144
    Par défaut Exécution d'un thread
    Bonjour,

    J'ai testé le tutoriel sur les threads :
    http://chgi.developpez.com/thread

    Ca marche très bien.

    Mon problème est : comment je peux intégré un thread dans mon application.

    Voici mon code :

    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
    //---------------------------------------------------------------------------
    
    void TGestionFrm::MyFunc(ushort u, String FenCaption)
    {
            TForm1 *Fen=NULL;
            Fen = new TForm1(this);
            Fen->Caption=FenCaption;
                                    .
                                    .
                                    .
            PEncours(1,"Calcul en cours, Patientez....");
            //Mon code sur le traitement d'une base de données
    
            Fen->ShowModal();
            PEncours(2,"");}
    //---------------------------------------------------------------------------
    La fonction PEncours est applée plusieurs fois dans l'application.
    Elle affiche un controle : AdvCircularProgress qui est active (Enabled=true) si le 1er paramaitre est égale à 1 sinon il le désactive (Enabled=false);

  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
    Ton thread est une classe, tu peut donc créer une instance de cette classe comme n'importe quelle classe et utiliser cette instance.

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 144
    Par défaut
    Tout d'abord merci,

    Oui c'est vrai ce que tu dit, j'ai déja utiliser cette solution, mais mon prg se plante :

    La fenetre PatientezFrm est la fenetre qui permet d'afficher le controle AdvCircularProgress1 :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
     
    #include "PatientezUnit.h"
     
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma link "AdvProgressBar"
    #pragma link "AdvProgr"
    #pragma link "AdvCircularProgress"
    #pragma resource "*.dfm"
    TPatientezFrm *PatientezFrm;
    //ThreadClass1 *MyThread1;
    //---------------------------------------------------------------------------
    __fastcall TPatientezFrm::TPatientezFrm(TComponent* Owner)
            : TForm(Owner)
    {
     
    }
    //---------------------------------------------------------------------------
     
     
    void __fastcall TPatientezFrm::FormActivate(TObject *Sender)
    {
            //Synchronize(UpdateCaption);
            PatientezFrm->AdvCircularProgress1->Enabled=true;
            PatientezFrm->AdvCircularProgress1->Refresh();
     
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TPatientezFrm::FormClose(TObject *Sender,
          TCloseAction &Action)
    {
    /*        PatientezFrm->AdvCircularProgress1->Enabled=false;
            MyThread1 = new ThreadClass1(false);
            MyThread1->Suspend();*/
            if(MonThread) Action = caNone;
            PatientezFrm->AdvCircularProgress1->Enabled=false;
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TPatientezFrm::FormCreate(TObject *Sender)
    {
            MyThread1 = new ThreadClass1(true);
            MyThread1->Resume();
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TPatientezFrm::FormPaint(TObject *Sender)
    {
            MonThread = new TMonThread(false);
            MonThread->OnTerminate = FinDeMonThread;
            EnableWindow(Handle, false);
     
    }
    //---------------------------------------------------------------------------
    void __fastcall  TPatientezFrm::FinDeMonThread(TObject *Sender)
    {
            EnableWindow(Handle, true);
            msg->Caption = "Thread terminé";
            delete MonThread;
            MonThread = NULL;
    }
     
    //---------------------------------------------------------------------------

  4. #4
    Membre émérite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Par défaut
    Crée une classe héritant de TThread, tu surcharges le constructeur si nécessaire et la méthode Execute.
    Ensuite, il te suffit d'instancer ta classe et laisser ton thread s'amuser seul. Un join est nécessaire en fin de vie de ton application.

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 144
    Par défaut
    Si tu peux m'expliquer par un bout de code.

    Merci

  6. #6
    Membre émérite
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Par défaut
    aller je fais un effort
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class MyThread : public TThread {
    public:
      MyThread( bool est_ce_que_je_suspend_mon_thread = false ) : TThread( est_ce_que_je_suspend_mon_thread ) {
        // Je fais le configure si nécesssaire
      }
      virtual void Execute() {
         // Je fais quelque chose
      }
    private:
    };
    PS : Suffit de lire la doc de Borland :'(

    F1 -> TThread -> Voir utilisation TThread.

Discussions similaires

  1. l'ordre d’exécution d'un thread
    Par amazircool dans le forum Concurrence et multi-thread
    Réponses: 9
    Dernier message: 30/12/2007, 17h39
  2. Exécution d'un Thread dans une méthode statique
    Par barbiche dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 03/05/2007, 14h25
  3. Affichage d'un JOptionPane au cours de l'exécution d'un Thread
    Par azad_892000 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 20/03/2007, 22h23
  4. [Thread] Stopper l'exécution d'un thread brutalement
    Par Razgriz dans le forum Concurrence et multi-thread
    Réponses: 7
    Dernier message: 31/01/2007, 19h55
  5. [java.util.Timer]Comment arrêter l'exécution d'un Thread
    Par Invité dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 07/06/2006, 07h54

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