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

Visual C++ Discussion :

Thread et plusieurs boites de dialogues


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Par défaut Thread et plusieurs boites de dialogues
    Bonjour,

    petite explication:

    J’ai donc une boite de dialogue qui lance un thread qui s’occupe de lancer des messages à l’application pour intercepter le port série, ce qui fonctionne bien.

    Lorsque je lance à partir de cette boite de dialogue une seconde boite fille, j’aimerais partager avec elle les informations de ce port série.

    Je mets donc les infos du port de la première boite de dialogue dans un Cstring,

    J’ai un thread dans la seconde boite de dialogue (fille) qui lance des messages pour faire ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    m_reception.SetSel(m_reception.GetWindowTextLength(),m_reception.GetWindowTextLength());
    m_reception.ReplaceSel((*pDlg).m_donnee);
    donc recuperer les données.

    le problème est que lorsque je la deuxième boite de dialogue (non modal) est ouverte, la lecture du port série est en attente (et repart dès que la boite fille est fermée), alors que j’arrive toujours a envoyé des info par ce même port par l’intermediaire de la boite de dialogue mère. D’ailleurs l’affichage des la boite mère fonctionne lorsque la fille est ouverte, ce qui implique que la boite principale recoit et traite toujours ses messages.

    Y aurait il un moyen de garder le traitement des informations du port série de la boite de dialogue mère, durant l’exécution de la fille ?

    Merci
    Ellipse2v

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Par défaut
    bonjour,

    petite précision en fait que je n'avais pas remarqué.

    c'est quand je lance le thread de la fenêtre fille, que la mère ne lit plus le port série.
    mais dès que le thread de la fille est fermé, la fenêtre mère lit tout le contenu du buffer du port série.

    donc comment éviter ce blocage?

    merci
    ellipse2v

  3. #3
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    tu peux montrer le code de lancement de tes threads?

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Par défaut
    bonjour,

    Pour la fenêtre mère:
    Dans OnInitDialog

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    m_prThread=AfxBeginThread(m_porta.ThreadSuivi,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UINT port::ThreadSuivi(LPVOID pParam)
    {
    	// envoie du message de traitement à la fenetre
    	::PostMessage((HWND)pParam,WM_SUIVI,0,0);
    	return 0;
    }
    ET pour le

    ON_MESSAGE(WM_SUIVI,ReceiveModem)//message modem


    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
    LRESULT  CprogDlg::ReceiveModem(WPARAM wParam, LPARAM lParam)
    {
    		// 
    	DWORD dwBytesTransferred;
    	int i=0;
    	char c='b';
    	while ((ReadFile(m_porta.GetHANDLE(), &c, 1, &dwBytesTransferred, 0))& m_porta.Getlecture())
    	{
     
    		if (c!='b')
    		{
    			m_donnee.Format("%c",c);//car
    				c='b';
    	//// pour que cela fonctionne j’ai enlevé le thread de la fille et je lui post des messages d’ici.                   
            //::PostMessage(m_fenetrereglage.m_hWnd,WM_LECTURE,0,0);
    				OutputDebugString("thread");
     
    		}
    	m_porta.PumpMessages();
     
     
           }
    		return (LRESULT)0;
     
    }

    Pour la fille :
    Sur un evenement click bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_prThread=AfxBeginThread(Lecture,GetSafeHwnd(),THREAD_PRIORITY_NORMAL);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UINT reglage::Lecture( LPVOID pParam )
    {	
     
     
    	// envoie du message de traitement à la fenetre
    	::PostMessage((HWND)pParam,WM_LECTURE,0,0);
    	return 0;
    }

    ON_MESSAGE(WM_LECTURE,affichelecture)//message modem

    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
     
    LRESULT  reglage::affichelecture(WPARAM wParam, LPARAM lParam)
    {
     
    	while(ok)
    	{
     
    	m_reception.SetSel(m_reception.GetWindowTextLength(),m_reception.GetWindowTextLength());
    			m_reception.ReplaceSel((*pDlg).m_donnee);
     
     
     
    		//OutputDebugString("thread\n");
     
    	PumpMessages();
    	}
    		return (LRESULT)0;
     
    }

    Temporairement j’ai modifié le code de sorte que le thread de la fenêtre mère envoye un message à la fille.
    Dans ce cas là, je supprime le thread fille, et j’enleve le tantque de la fonction affichelecture.
    ça à l'air d'être bien



    merci
    ellipse2v

  5. #5
    Membre confirmé Avatar de lenouvo
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 252
    Par défaut
    hmm de prime abord, j'ai pas trop d'idées..
    histoire de pas surcharger le cpu, essaye de mettre un Sleep(200) par ex dans tes boucles while. Ou sinon essaye SendMessage au lieu de PostMessage même si je crois que ca fonctionne pas avec les ON_MESSAGE ou je confonds

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Par défaut
    je teste ça dès lundi.


    merci en tout cas

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/02/2012, 14h38
  2. Variables pour plusieurs boites de dialogue
    Par bontempf dans le forum MFC
    Réponses: 2
    Dernier message: 18/03/2007, 14h57
  3. Ouvrir plusieurs boites de dialogues les unes après les autres
    Par troumad dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 25/02/2007, 11h55
  4. boite de dialogue avec plusieurs zones de text
    Par hammag dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 11/05/2006, 15h04
  5. Pb plusieurs boites de dialogues
    Par schnito dans le forum MFC
    Réponses: 10
    Dernier message: 25/02/2004, 21h44

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