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

MFC Discussion :

Lancer un multithread


Sujet :

MFC

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 36
    Points
    36
    Par défaut Lancer un multithread
    Bonjour !

    J'ai quasiment fini le logiciel que je suis entrain de developper. (a part quelques bugs...). j'aimerai l'"optimiser" un peu. j'ai un traitement plutôt long sur des fichiers (2 à 3 min). pendant ce temps la, le logiciel est figé. (normal car tout est procedural..).


    Est il possible de lancer la fonction dans un autre thread ? 'j'ai regardé la faq, il y a un exemple. mais dans cet exemple, il n'y a pas de passage de parametre.
    (Dans le même ordre d'idée, j'aimerai afficher un écran d'attente le long du traitement)

    Comment dois je proceder ?

    Merci beaucoup pour vos futures réponses,
    Cordialement
    Julien

  2. #2
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Points : 65
    Points
    65
    Par défaut
    La plupart de thread accepte un paramètre. Un général on lui passe donc un pointeur vers l'objet appelant (this).

    Après tu as juste à mettre tes paramètres initiaux en données membres de ta classe et tu pourra les utilisés.

    Fonction de départ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void foo(int param1, int param2);
    Se transforme en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class MyClass {
    int m_param1;
    int m_param2;
    (...)
    static UINT fooThread(LPVOID pvParam);
    (...)
    };
     
    UINT fooThread(LPVOID pvParam) {
    MyClass *pThis = (MyClass*)pvParam;
    (...)
    pThis->m_param1 = pThis->m_param2;
    }
    et pour l'appel :


  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 36
    Points
    36
    Par défaut
    Merci pour ta méthode, elle devrait fonctionner.
    mais si je veux récupérer des paramètres dans la fonction qui appelle le thread, je ne peux pas (ou je ne sais pas cmt faire).

    A moins que tu ais une solution, je vais déclarer des pointeurs dans ma classe qui prendront l'adresse des paramêtres.

    Merci,
    Bonne journée

    Julien

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    Points : 65
    Points
    65
    Par défaut
    Et bien, avant l'appel du thread dans ta fonction, tu stock tes paramètres dans des données membres.
    Ou alors oui tu utilise des pointeurs.

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par jderam Voir le message
    Bonjour !

    J'ai quasiment fini le logiciel que je suis entrain de developper. (a part quelques bugs...). j'aimerai l'"optimiser" un peu. j'ai un traitement plutôt long sur des fichiers (2 à 3 min). pendant ce temps la, le logiciel est figé. (normal car tout est procedural..).


    Est il possible de lancer la fonction dans un autre thread ? 'j'ai regardé la faq, il y a un exemple. mais dans cet exemple, il n'y a pas de passage de parametre.
    (Dans le même ordre d'idée, j'aimerai afficher un écran d'attente le long du traitement)

    Comment dois je proceder ?

    Merci beaucoup pour vos futures réponses,
    Cordialement
    Julien
    salut, he bien tu as mal lu ...
    Citation Envoyé par FAQ
    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
     
     
    class CMyDialog : public CDialog
    {
    public:
        CMyDialog(CWnd* pParent = NULL)
            : CDialog(CMyDialog::IDD, pParent)
        {
            m_pThread = NULL;
        }
     
        bool InitThread()
        {
            m_pThread = AfxBeginThread(ThreadFunc, this);
            if(!m_pThread)
            {
                // Impossible de créer le thread !
                return false;
            }
            return true;              
        }
     
    private:
        CWinThread *m_pThread;            
     
        static UINT ThreadFunc(LPVOID pvParam);
    };
     
    UINT CMyDialog::ThreadFunc(LPVOID pvParam)
    {
        CMyDialog  *pThis=reinterpret_cast< CMyDialog *>( pvParam) ;
     
        // Votre code
        //
        return 0 ;
    }

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    Points : 36
    Points
    36
    Par défaut
    Oui, je n'avais pas compris le principe lorsque l'on récupére le pointeur de CDialog

    Merci!
    Je vais me débrouiller avec ca.

    Bon week end
    Julien

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

Discussions similaires

  1. Lancer une application multithread avec msdos
    Par SpIrIt505050 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 11/06/2008, 20h47
  2. Réponses: 14
    Dernier message: 18/07/2007, 16h28
  3. [VB6] Lancer un service, par exemple Sql Server
    Par fea dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/10/2002, 15h07
  4. [Kylix] probleme pour lancer le shell
    Par miky dans le forum EDI
    Réponses: 5
    Dernier message: 13/08/2002, 10h39
  5. Réponses: 8
    Dernier message: 05/06/2002, 12h55

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