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] PostMessage, multithread


Sujet :

MFC

  1. #1
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 111
    Points : 53
    Points
    53
    Par défaut [MFC] PostMessage, multithread
    Bonjour,
    Je reviens une nouvelle fois pour vous demander : est ce que le systeme de message avec PostMessage "gère les accès concurents"?
    En fait j'ai deux threads qui font un post message sur le même identifiant : et donc sur la même fonction associée à cet identifiant.
    Est ce que cette fonction peut-etre appelée simultanement par deux threads? et donc faut-il gerer les accès concurents sur les variables modifiées par cette fonction?
    Voici le code de ma fonction :
    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
     
    long CThreads_testDlg::OnReceiveMessageTest(WPARAM wparam, LPARAM lparam) 
    { 
    	int indice = (int) wparam;
    	int id = (int) lparam;
    	/*CString ids;
    	ids.Format("id=%d -- cpt=%d",id ,_compteur );
    	AfxMessageBox(ids);*/
    	if(_compteur > 0)
    	{
    		_compteur--;
    		SetEvent(_threads[indice]->_events[0]);	
    	}
    	else
    	{
    		SetEvent(_threads[indice]->_events[1]);
    	}
    	return 0;
    }
    Comment faire pour mettre un verrou autour de ma variable _compteur? (qui est une variable de classe)

  2. #2
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Points : 138
    Points
    138
    Par défaut
    Windows gère les messages grace à une pile de messages, la pile est dépilée au fur et à mesure, chaque message est traité individuellement et un message à la fois.

    Pour la protection des ressources, dans ton cas regarde du coté des mutex.

  3. #3
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 111
    Points : 53
    Points
    53
    Par défaut
    Il n'est donc pas possible que la fonction décrite précedemment soit appelée une seconde fois avant qu'elle ne se soit completement terminée?
    même si deux threads font apelle au message qui lui est associé?

  4. #4
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Points : 138
    Points
    138
    Par défaut
    Normalement non car les messages sont empilés dans la queue.

    Mais tu peux le vérifier avec les mutex, en mettant un timeout.

  5. #5
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 111
    Points : 53
    Points
    53
    Par défaut
    et comment fonctionne les mutex? j'ai lu quelques doc mais c'est pas très bien expliqué... aurais-tu une explication simple? est-il possible de faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Lock()
    //traitement
    Unlock()
    ???

  6. #6
    Membre habitué
    Inscrit en
    Avril 2004
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 122
    Points : 138
    Points
    138
    Par défaut
    Oui c'est exactement ça, tu te déclare un CMutex dans ta dial et quand tu veux commencer ta protection tu mutex.lock() et quand tu as finis tu fais mutex.unlock().

  7. #7
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 111
    Points : 53
    Points
    53
    Par défaut
    cool 8) , merci pour ton aide

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

Discussions similaires

  1. [MFC]Simuler CTRL+HOME avec PostMessage
    Par corwin_d_ambre dans le forum MFC
    Réponses: 4
    Dernier message: 27/01/2006, 11h48
  2. Réponses: 5
    Dernier message: 11/01/2006, 07h58
  3. [MFC] multithread, communication père<->fils
    Par Joeleclems dans le forum MFC
    Réponses: 19
    Dernier message: 19/05/2005, 10h31
  4. [WinAPI C++] MultiThreading et PostMessage
    Par Gruik dans le forum Windows
    Réponses: 7
    Dernier message: 29/03/2004, 15h58
  5. [MFC] Ctrl/Alt+touches avec PostMessage
    Par Fladnag dans le forum MFC
    Réponses: 4
    Dernier message: 10/02/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