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 :

[MFC]Détection de la fin d'un thread


Sujet :

MFC

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut [MFC]Détection de la fin d'un thread
    J'ai fait un thread dans une appli MFC sous visual.net Et j'aimerais savoir comment fait-on pour attendre la fin de l'excecution du thread ? Et savoir quand le thread est fini.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    LPVOID pParam; 
    	//création d'un Thread 
    	AfxBeginThread(MonThread,pParam,INFINITE,0,0,NULL);
    	return S_OK;
    }
    UINT SIPCom::MonThread(LPVOID pParam) 
    { 
    	Sleep(1000);
    	return 0;   // thread completed successfully 
    }

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 189
    Par défaut
    Lut

    Ton Thread peut envoyer un message pour signaler qu il a fini.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    et comment on envoie un message ?

  4. #4
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 46
    Par défaut
    SendMessage

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    Est-ce que je pourrais avoir un morceau de code ça m'aiderais s'il vous plait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    LPVOID pParam; 
       //création d'un Thread 
       AfxBeginThread(MonThread,pParam,INFINITE,0,0,NULL);
    //NE PAS CONTINUER TANT QUE LE THREAD N'EST PAS FINI 
       return S_OK; 
    } 
    UINT SIPCom::MonThread(LPVOID pParam) 
    { 
       Sleep(1000); 
       return 0;   // thread completed successfully 
    }

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Par défaut
    ca n'est pas joli joli....

    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
     
    LPVOID pParam; 
    volatile BOOL bfini ;
       bfini = false ;
       //création d'un Thread 
       AfxBeginThread(MonThread,pParam,INFINITE,0,0,NULL); 
      //NE PAS CONTINUER TANT QUE LE THREAD N'EST PAS FINI 
      while (bfini == false) ;
       return S_OK; 
    } 
     
    UINT SIPCom::MonThread(LPVOID pParam) 
    { 
       Sleep(1000); 
       bfini = true ;
       return 0;   // thread completed successfully 
    }

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    Merci mais il y a une erreur dans MonThread j'ai error C2065: 'bfini' : identificateur non déclaré

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Par défaut
    je suis un peu nul ...


    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
    Code: 
     
    LPVOID pParam; 
    volatile BOOL bfini ; 
       bfini = false ; 
       //création d'un Thread 
       AfxBeginThread(MonThread,&bfini,INFINITE,0,0,NULL); 
      //NE PAS CONTINUER TANT QUE LE THREAD N'EST PAS FINI 
      while (bfini == false) ; 
       return S_OK; 
    } 
     
    UINT SIPCom::MonThread(LPVOID pParam) 
    { 
       Sleep(1000); 
       BOOL * pbfini ;
       pbfini  =( BOOL * )pParam ;
       *pbfini = true ; 
       return 0;   // thread completed successfully 
    }

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    J'ai cette erreur maintenant
    error C2665: 'AfxBeginThread' : aucune des surcharges 2 ne peut convertir le paramètre 2 à partir du type 'volatile BOOL *__w64 '

    Et merci beaucoup de ton aide

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    J'ai enlevé "volatile" ca marche au compilo. Mais le problème la boucle fait planter mon appli. Et j'ai besoin d'envoyer un BSTR à mon thread.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Par défaut
    remplace

    AfxBeginThread(MonThread,&bfini,INFINITE,0,0,NULL);

    par

    AfxBeginThread(MonThread,(LPVOID)&bfini,INFINITE,0,0,NULL);

    et remets le volatile, des que tu ne seras plus en compile de debug, le volatile va devenir important....

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    le while fait planter l'application Ca arrete la partie graphique donc ca plante.

  13. #13
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Pour attendre la fin d'un thread utilise WaitForSingleObject

    Il suffit d'avoir le handle du thread.

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    Citation Envoyé par hegros
    Pour attendre la fin d'un thread utilise WaitForSingleObject

    Il suffit d'avoir le handle du thread.
    Comment avoir le handle ?

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Par défaut
    Afbegintherad retourne un CWinThread*

    CWinThread* a un membtre m_thread que tu dois utiliser au lieu de ma bisouille qui te prmettait simplement de (mal) vérifier de temps en temps si le thread est terminé

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    Citation Envoyé par bjousse
    Afbegintherad retourne un CWinThread*

    CWinThread* a un membtre m_thread que tu dois utiliser au lieu de ma bisouille qui te prmettait simplement de (mal) vérifier de temps en temps si le thread est terminé
    J'ai ça, et je n'arrive pas à faire ce que tu m'explique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    LPVOID pParam;
    CWinThread* tt;
    tt = AfxBeginThread(TheThread, pParam,THREAD_PRIORITY_NORMAL) ;
    tt->m_hThread

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 77
    Par défaut
    en simplifiant


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    LPVOID pParam; 
    CWinThread* tt; 
    tt = AfxBeginThread(TheThread, pParam,THREAD_PRIORITY_NORMAL) ; 
    if (tt)
    {
        WaitForSingleObject(tt->m_hThread, INFINITE) ;
    }
    else
    .....
    attendra (longtemps) que le therad crée soit terminé

  18. #18
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    849
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 849
    Par défaut
    Merci beaucoup ca marche

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

Discussions similaires

  1. [thread]attendre la fin d'un thread?....
    Par babarpapa dans le forum Concurrence et multi-thread
    Réponses: 9
    Dernier message: 29/03/2006, 14h31
  2. [C#] Fin d'un Thread
    Par maitrebn dans le forum C#
    Réponses: 2
    Dernier message: 18/11/2005, 10h56
  3. Réponses: 13
    Dernier message: 04/11/2005, 11h58
  4. [Thread] comment attendre la fin d'un thread?
    Par billynirvana dans le forum Concurrence et multi-thread
    Réponses: 11
    Dernier message: 24/08/2005, 10h43
  5. [MFC]Recuperation de variable situé dans un thread
    Par dreamkiller dans le forum MFC
    Réponses: 26
    Dernier message: 05/04/2005, 15h26

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