UpdateData dans un thread

[Résolu]
Signaler
Messages postés
17
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
31 janvier 2009
-
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
-
Comment faire pour mettre a jour les valeurs des controls d'une boite de dialog depuis un thread?
Par ex si un CEdit affiche une CString m_Msg;
Par quoi dois je remplacer le UpdateData(FALSE);

[blue]void[\blue] RunThread([blue]void[\blue] *lpParam)
{
CMyDlg *pDlg = (CMyDlg *)lpParam;
[blue]int[\blue] counter= 0;
[blue]while[\blue](pDlg->ContinuThread)
{
pDlg->m_Msg.Format("counter = %d",counter);
UpdateData(FALSE);
}
pDlg->hThread=0;
_endthread();
[blue]return[\blue] ;
}

4 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Il faut associer l'Edit à un contrôle CEdit (par ex m_edt).

Dans le thread, pour modifier le texte à afficher, il faudra appeler les fct d'encapsulation de l'API (celle qui apppele SendMessage), pour affecter/récupérer le texte.

dans ton cas : m_edt.SetWindowText(m_Msg);

UpdateData ne peut pas être appelée dans un thread (provoque un ASSERTION FAILED si je me souvient bien)
Messages postés
17
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
31 janvier 2009

merci ça marche. Et oui, tu as raison pDlg->UpdateData(false); provocait un ASSERTION FAILED
Messages postés
25
Date d'inscription
vendredi 11 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2004

J utilise

SendDlgItemMessage(dlg,IDC_TIMESTAMP,Timestamp, 0, 0 );

mais l affichage n a pas lieu tant que tourne le thread que faire ???
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
au pire,
fait un envoi de msg direct, tu sauras le traiter ds ton appli ...

++
Magic Nono: l'informagicien! 8-)