Bonjour,
J'ai un petit soucis au niveau de l'utilisation d'un thread pour envoyer un message:
Tout d'abord, voici le code issu de la FAQ:
Dans le .h de ma classe CVersionDlg, je fais ceci:
Dans le .cpp de ma classe CVersionDlg, je fais ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 bool InitVersionThread() { m_pThread = AfxBeginThread(VersionThread, this); if(!m_pThread) { // Impossible de créer le thread ! return false; } return true; }
En principe, j'ai l'habitude de démarrer mon thread dans l'OnInitDialog() de la classe du thread et j'avais aucun soucis.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39 /************************************************************************* *VersionThread(): Thread qui détecte le changement d'un radio button * *14/02/2007 **************************************************************************/ UINT CVersionDlg::VersionThread(LPVOID pvParam) { CVersionDlg *pThis=reinterpret_cast< CVersionDlg *>( pvParam); int nVersionBase = -1; while(!pThis->m_bEndVersionThread) { //::PostMessage(pThis->m_hWnd,WM_UPDATE_VERSION,0,0); //Si choix différent d'une version de base if (nVersionBase != pThis->m_nVersionBase) { nVersionBase = 2; } } // signale l'objet event d'attente et sort du thread. ::SetEvent(pThis->m_hWaitVersionThread); return 0; } /************************************************************************* *OnReceiveUpdateVersion(): Mise à jour des variables associées au control * *14/02/2007 **************************************************************************/ long CVersionDlg::OnReceiveUpdateVersion(WPARAM wparam,LPARAM lparam) { UpdateData(TRUE); return 0L; }
Mais dans ce cas, je démarre le thread à partir d'une autre classe qui instancie un objet de la classe CVersionDlg (classe du thread) comme ceci:
Le problème est que je ne rentre jamais dans le message posté à l'intérieur de mon thread...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 // Lancement du thread pour gérer l'affichage des fenetres filles dynamiques if(!oVersionDlg.InitVersionThread()) MessageBox("Erreur pour initialiser le thread de gestion des étapes!", "Erreur", MB_OK);
Apparemment, en mode debug, pThis->m_hWnd vaudrait NULL et je me dis que le soucis vient de là.
Comment puis je remédier à cela?
Il y a t'il un moyen de déclencher un thread au travers une instance de la classe du thread et de permettre l'envoie de message dans la classe du thread en question?
J'espère être compréhensible!![]()
![]()
Merci
Nicolas
Partager