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