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 réaliser des calculs en parallèle [Langage/Algorithme]


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Chercheur génie électrique
    Inscrit en
    Mai 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur génie électrique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 263
    Par défaut Comment réaliser des calculs en parallèle
    Comme il y a plus en plus de PC multi-cœurs, je voudrais paralléliser une application afin d’accélérer les calcul.
    J’ai une application principale réalisée sous BCB. Dans cette appli, plusieurs DLL seront appelées pour effectuer des différents calculs.
    Sous BCB, est-ce qu’il est possible de faire quelque chose dans l’application principale pour que les DLL soient exécutées en parallèle (bien sur dans les PC multi-cœurs).
    Merci d’avance

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Utilise des threads (classe TThread). Un petit tuto ici.

  3. #3
    Membre éclairé
    Homme Profil pro
    Chercheur génie électrique
    Inscrit en
    Mai 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur génie électrique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 263
    Par défaut
    Merci beaucoup.
    Juste un petit problème: dans les codes ci-dessous, le programme se bloque sur "delete MonThread". Je l'ai enlevé et cela marche (mais, peut-être il y a fuite de mémoire?).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void __fastcall  TForm1::FinDeMonThread(TObject *Sender)
    {
            EnableWindow(Handle, true);
            Label1->Caption = "Thread terminé";
            delete MonThread;
            MonThread = NULL;
    }

  4. #4
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 35
    Par défaut
    Pour terminer un thread proprement, voici la méthode que j'utilise :
    1- dans la méthode Execute() du thread lui-même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    do  {// traitement 
         // suite ...
        }while(Terminated() == false);
    // quitter le thread
    2 - dans la fiche principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // demander au thread de s'arrêter
    MonThread->Terminate();
    // attendre l'arrêt du thread
    MonThread->WaitFor();
    // le thread est arrêté, libérer la mémoire
    delete MonThread;
    Si tu te contentes d'un "delete MonThread" sans rien faire d'autre, tu vas droit vers un plantage car tu libères la mémoire alors que le code du thread est toujours en train de s'exécuter.

  5. #5
    Membre éclairé
    Homme Profil pro
    Chercheur génie électrique
    Inscrit en
    Mai 2002
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur génie électrique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 263
    Par défaut
    Merci Luc84,
    J'ai encore une question: qu'est-ce qu'on met dans MonThread->Terminate();

  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
    Salut,
    tu n'y met rien, c'est une méthode déjà défini par Borland, tu n'as pas besoin de la réécrire, elle est associé a la méthode Terminated() également défini par Borland (l'une met la propriété Terminated à true, et l'autre renvoie l'état de la propriété Terminated)

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

Discussions similaires

  1. Comment réaliser des calculs en cascade
    Par gambi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/12/2013, 20h14
  2. Réponses: 1
    Dernier message: 21/02/2006, 10h52
  3. comment réaliser des couleurs en c++
    Par reva dans le forum C++
    Réponses: 12
    Dernier message: 20/11/2005, 15h20
  4. Comment réaliser des modèles de documentations avec XML ?
    Par Dams76 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 29/08/2003, 02h15
  5. Réponses: 8
    Dernier message: 18/09/2002, 03h20

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