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 :

comportement des thread:: sleep du thread principal


Sujet :

MFC

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 110
    Points : 59
    Points
    59
    Par défaut comportement des thread:: sleep du thread principal
    Bonjour,

    Dans ma classe je creer un thread dans le OnInitDialog();
    // cela voudra normalement dire que j'ai deux threads, le principale et celui que je vien de creer.

    puis apres dans une autre methode, je je creer un troisieme thread et tt de suite apres je met une boucle while dont la condition depend d'un parametre que le ce dernier thread doit changer, et dans la boucle je met Sleep(1000);

    mais la, et apres de debogage mon programme n'execute que cette boucle!! que le thread principal en quelque sorte!!

    je comprends pas ce comportement!!
    comment pouvez vous expliquez ça?

    Merci pour votre aide.

  2. #2
    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
    salut,
    ce n'est pas très clair, mais si j'ai compris tu as mis une boucle dans le processus principal avec un sleep ?
    déjà c'est une très mauvaise idée de faire sleep dans une boucle dans le process principal cela étouffe l'application, les messages Windows ne sont plus traités .
    suivant la valeur du sleep (si tu a mis 20 ms par exemple) cela fera monter le cpu a 100 % (sur un mono coeur ,50% sur un dual core etc) et donc monopolisera le cpu sur ce thread..
    pour faire de la synchro entre thread il faut utiliser des objets de synchronisation et veiller à ne pas accaparer le cpu sur un thread.
    Tout cela est traité dans la faq.

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 110
    Points : 59
    Points
    59
    Par défaut
    ok, merci
    je vais essayer, je voulais eviter les evenement pck je ne les ai jamais utiliser avant en c++!!

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 110
    Points : 59
    Points
    59
    Par défaut
    au fait ce que j'ai trouvé sur la faq s'applique juste sur les threads initiés par la fonction AfxBeginThread et moi je le fait avec createthread()..donc!!!
    je vais mieux expliquer le probleme:
    je veux que le thread principal s'arrete en attendant que le troisieme thread effectue certaines tâches, pour cela g mit un bool que je met a vrai lorsque ce dernier fini ce qu'il a faire avant que le principal continue.
    je sais pas comment faire ça!! j'ai penser a une boucle, mais apparament c'est null

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 110
    Points : 59
    Points
    59
    Par défaut
    est ce qu'il a en mfc un truc du genre,
    wait(condition);
    ou notify(condition);
    ?

  6. #6
    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
    avec les MFC il faut toujours utiliser afxBeginThread pour initier un thread.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Djawida Voir le message
    est ce qu'il a en mfc un truc du genre,
    wait(condition);
    ou notify(condition);
    ?
    Et tout un tas même. Je te conseille un petit tour par le MSDN et Multithreading with C++ and MFC .

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 110
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par farscape Voir le message
    avec les MFC il faut toujours utiliser afxBeginThread pour initier un thread.
    j'essay d'utiliser afxBeginThread , voila ce que j'avais au debut
    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
     
     
      HANDLE m_hMyThread;
    DWORD dwThreadId;
      m_hMyThread =createThread( 
                NULL,              
                0,                 
    	MaClasse::MyThread, // thread function 
                (LPVOID)this,      // argument to thread function 
                0,                 // use default creation flags 
                &dwThreadId)
     
    DWORD WINAPI MaClasse::MyThread( LPVOID lParam )
    { 
    ...
    }
    apres changement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CWinThread* m_hMyThread 
    m_hMyThread = AfxBeginThread( 
                MaClasse::MyThread,              
                (LPVOID)this,                
    			THREAD_PRIORITY_NORMAL, 
                0,
    			0,
    			NULL);
    et ça me donne l'erreur suivante lors de la compilation:

    none of the 2 overloads can convert parameter 1 from type 'unsigned long (void *)'

    c'est quoi le probleme?

Discussions similaires

  1. Question sur le comportement des threads
    Par Krishna dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 12/01/2009, 21h56
  2. Des problemes avec ces threads <pthread.h>
    Par nasamad dans le forum GTK+ avec C & C++
    Réponses: 26
    Dernier message: 07/07/2006, 12h46
  3. [Thread] PB Thread.sleep(1000) marche pas
    Par kliel dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 03/12/2004, 13h47
  4. question sur le comportement des threads
    Par rose-bonbon dans le forum CORBA
    Réponses: 4
    Dernier message: 27/10/2004, 18h00
  5. [Thread]sleep()
    Par jokoss dans le forum Concurrence et multi-thread
    Réponses: 15
    Dernier message: 03/07/2004, 14h33

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