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

Threads & Processus C++ Discussion :

classe dérivée de thread


Sujet :

Threads & Processus C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 82
    Points : 73
    Points
    73
    Par défaut classe dérivée de thread
    bonjour

    je suis entrain de programmer une application multi-threading avec borland c++ builder.

    j'ai une classe Calcul qui hérite de thread avec plusieurs méthodes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Calcul : public TThread
    {
     
    private:
                ....
    public:
               calcul();
               void operation1();
               void operationl2();
               void operation3();
               void saisie();
               ......
    };
    l'utilisateur lance, un calcul un nouveau objet calcul est créé.
    l'utilisateur choisit une opération1, l'objet calcul renvoie le résultat.
    l'utilisateur choisit une opération2, l'objet calcul renvoie le résultat.


    comment faire pour que chaque calcul soit exécuté dans un thread séparé??
    d'après les tutoriaux , il faut mettre le code à exécuter dans le thread dans la procedure execute() .

    comment faire pour que les méthodes de class calcul soient toutes exécutées dans le thread et que le thread communique avec l'extérieur?

    merci

    j'ai mis ceci dans c++ et pas dans forum borland, car c'est un probleme de conception.

  2. #2
    Membre averti Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Points : 383
    Points
    383
    Par défaut Re: classe dérivée de thread
    Citation Envoyé par aaronw
    comment faire pour que chaque calcul soit exécuté dans un thread séparé??
    d'après les tutoriaux , il faut mettre le code à exécuter dans le thread dans la procedure execute()
    Essaie de mettre ton code dans execute et dis nous après si ca fonctionne ou quels sont tes problèmes (c'est pas du C++, c'est du builder) !

    Citation Envoyé par aaronw
    comment faire pour que les méthodes de class calcul soient toutes exécutées dans le thread et que le thread communique avec l'extérieur?
    google + tutoriaux sur les threads je pense !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 82
    Points : 73
    Points
    73
    Par défaut
    Essaie de mettre ton code dans execute et dis nous après si ca fonctionne ou quels sont tes problèmes (c'est pas du C++, c'est du builder) !
    justement je ne sais pas quoi mettre dans mon execute();
    execute est lancé au moment de la création de l'objet calcul;

    or l'utilisateur crée l'objet calcul et apres il doit choisir une opération.
    donc au moment ou l'execute() est lancé l'utilisateur n'a pas encore choisi son opération.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 82
    Points : 73
    Points
    73
    Par défaut plus de précisions.
    l'objet calcul est créé, l'interface affiche à l'utilisateur les opérations possibles et un bouton OK.
    dès que l'utilisateur sélectionne une opération (exemple opération 4) et appuye sur OK la méthode opération4() de calul s'exécute dans le thread.

  5. #5
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    TThread::Execute(...) est grosso modo l'équivalent du main() pour un TThread de Borland. Si tu désires que ton TThread se mette en attente d'un événement particulier, je vois deux approches :

    1 - implémenter l'équivalent d'une boucle de messages dans la méthode Execute(). A toi de définir l'événement déclencheur :
    - un message Windows ?
    - un fichier trigger
    - la modification de l'état d'un objet partagé (entre ton TThread observateur et le process initial, je suppose)

    2 - les threads peuvent être suspendus et activés (voir la doc TThread). Tu peux donc :
    - implémenter tes calculs dans la méthode Execute(...)
    - créer ton thread en état "suspendu"
    - réveiller le thread sur onOKButtonClick() ou tout autre événement/méthode pertinent

    NB : ne pas oublier de penser aux problèmes d'accès concurrents. 8)

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 82
    Points : 73
    Points
    73
    Par défaut
    Execute() est l'equivalent du main() : c'est ce que je voulais comprendre.

    Merci.

    Donc finalement j'ai fait ceci dans Execute()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while ( monThread->Terminated==false)
    {
              if (monIHM->evenement == true)
              {
                   operation();
                   .....
              }
    }
    maintenant ce que je voulais savoir en faisant un delete de mon objet calcul , le thread est également détruit???

  7. #7
    Membre averti Avatar de niglo
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 379
    Points : 383
    Points
    383
    Par défaut
    Citation Envoyé par aaronw
    maintenant ce que je voulais savoir en faisant un delete de mon objet calcul , le thread est également détruit???
    Si le thread est un composant de ta classe il sera détruit en même temps que ton objet calcul.
    Si tu l'as déclaré autre part dans ton code, tu dois le détruire à la main !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 82
    Points : 73
    Points
    73
    Par défaut
    ma classe calcul hérite de TThread donc c elle meme un composant thread.

  9. #9
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    De mémoire, TThread encapsule proprement son thread. Tu n'as donc pas à t'occuper de ces détails. Voir tout de même la doc VCL pour plus de précision. De mémoire aussi, elle est assez claire sur ce sujet

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 82
    Points : 73
    Points
    73
    Par défaut
    Merci Herode

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 02/05/2006, 19h28
  2. Réponses: 2
    Dernier message: 06/12/2005, 09h41
  3. Réponses: 4
    Dernier message: 20/11/2005, 05h48
  4. [MFC] CArray et classe dérivée?
    Par TigreRouge dans le forum MFC
    Réponses: 14
    Dernier message: 02/08/2005, 22h45
  5. Déterminer le type d'une class dérivée
    Par LDDL dans le forum MFC
    Réponses: 3
    Dernier message: 10/12/2004, 17h36

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