Bonsoir,
Je vous explique mon problème : J'ai un programme qui comporte 2 threads de comptage (incremente une progressBar). Jusque là tout va bien. Maintenant je dois gerer les threads en fonction des messages.
Un compteur a son propre thread. a la fin du comptage le thread est détruit et recreer pour recommencé le comptage...
diagramme de classe :
ihm->Sablier (par composition)
dans Sablier il y a une methode Execute() pour faire le thread dans ihm.
dans la méthode Execute j'ai :
dans l'ihm pour gerer les messages :
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 UINT Sablier::Execute() { value->SetRange(mini,maxi); do { value->SetPos(i); Sleep(100); i++; }while(i!=maxi); ihm->PostMessage(valmess,0,0); return 0; }
puis dans la méthode FinTempsQuestion :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 BEGIN_MESSAGE_MAP(CQuizzDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(B_REPONSE, &CQuizzDlg::OnBnClickedReponse) ON_MESSAGE(WM_USER,&CQuizzDlg::FinTempsQuestion) ON_MESSAGE(WM_USER+1,&CQuizzDlg::FinTempsQuizz) END_MESSAGE_MAP()
L'image du programme pour mieux comprendre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 LRESULT CQuizzDlg::FinTempsQuestion(WPARAM,LPARAM) { if(p != Mc.GetTailPosition()) { Mc.GetNext(p); Afficher(); } return 0; }
1er probleme débile : Comment faire en sorte que la barre de progression arrive jusqu'au bout ? (pourtant j'ai bien défini les mini et maxi avec Setrange...
2e probleme : a la fin de la 1ere barre de progression (celui du haut) il envoie un message a l'ihm pour que le thread du compteur reparte a zero et change de question. Or mon probleme, la barre s'arrete a la fin et ne redemarre pas sauf la 2e barre de progression (or sa devrait etre l'inverse)? Kesaco ?
Merci a celui qui me remettra sur le bon chemin avec les Sendmessages...
Partager