bonjour à tous,
Voilà, j'ai deux problèmes :
1/
Pour une application, utilisant visual2008 et les MFC, je crée un thread dans lequel je crée mon IHM principale (create (IDD...) puis ShowWindow()).
A la sélection d'un item du menu de l'IHM principale, je souhaite crée une boite de dialogue modale dont l'IDD est attaché à une classe.
Au final, à l'affichage de la deuxieme boite de dialogue, il n'est plus possible de cliquer, ni sur l'une ni sur l'autre, comme si elles etaient occupées. En mode debug, je m'apperçois que le code est bien dans le peekMessage de la fonction DoModal(). Y aurait-il un conflit quelque part?
Pour illuster voici les parties du code :
Code procedure du thread secondaire : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // Creation de l'IHM principale // CIhmPrincipal main_ihm ; //affichage de l'IHM principale main_ihm.StartIhm(); ... //peekmessage() pour ecouter les autres threads
Code dans le constructeur de la classe de l'IHM principale : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 AfxGetApp()->m_pMainWnd = this; this->Create(IDD_IHM_PRINCIPAL); Fonction StartIhm() : ... this->ShowWindow(SW_SHOWMAXIMIZED);
2/
Code Dans la fonction appelée à la selection de l'item du menu : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int result = 0; this->SetForegroundWindow(); m_pcIhmSecond = new CIhmSecond(this); result = m_pcIhmSecond->DoModal();
Dans cette même appli, je partage une Queue entre differents threads :
queue<ClasseMere> g_queue
dans un thread, je remplie cette queue avec des objets de classe derivée à ClasseMere :
Dans un autre thread, je lis le contenu de g_queue et je veux faire un traitement different selon que l'objet situé en tête de g_queue soit de la classe ClasseFille1 ou de la classe ClasseFill2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ClasseFille1 obj1; g_queue.push(obj1); ClasseFille2 obj2; g_queue.push(obj2);
=> comment faire puisque g_queue.front() retourne un objet de la classe ClasseMere???
Merci d'avance pour votre aide
Partager