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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    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 actif
    Inscrit en
    Octobre 2008
    Messages
    56
    D�tails du profil
    Informations personnelles :
    �ge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    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
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    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 actif
    Inscrit en
    Octobre 2008
    Messages
    56
    D�tails du profil
    Informations personnelles :
    �ge : 37

    Informations forums :
    Inscription : Octobre 2008
    Messages : 56
    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
    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
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 41
    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, 19h47
  2. R�ponses: 14
    Dernier message: 18/07/2007, 15h28
  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, 14h07
  4. [Kylix] probleme pour lancer le shell
    Par miky dans le forum EDI
    R�ponses: 5
    Dernier message: 13/08/2002, 09h39
  5. R�ponses: 8
    Dernier message: 05/06/2002, 11h55

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