Afficher une variable provenant d'un Thread ds une boite de dialogue

[Résolu]
Signaler
Messages postés
25
Date d'inscription
vendredi 11 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2004
-
Messages postés
25
Date d'inscription
vendredi 11 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2004
-
Bonjour

Je travaille avec une boite de dialogue qui lance un Thread de service. J'enregistre des variables dans ceThread, j'aimerais les afficher dans ma boite de dialogue toutes les secondes.
Comment faire???

Merci

Mathieu

variable declaree en Globale
UINT mavariable;
//-------------------------------------------------------
dans le thread
mavariable= packet->getSSRC();
//--------------------------------------------------------
dialogue box ds une fonction Ontimer()
SetDlgItemText(IDC_CSRC, LPCTSTR(mavariable));

15 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
Si tu n'as basoin d'acceder qu'a un CEdit depuis ton thread, alors passe '(void*) GetDlgItem(...)' a ton param a sa creation.

ciao...
BruNews, MVP VC++
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Bah tu mets SetDlgItemText ds ton thread, ou est le pb ?
Si tu les affiches avec un timer, tu les declare en global et SetDlgItemText ds ta dlgproc.
Explik un peu mieux paske je ne pense pas avoir saisi la nature de ton pb..

+2(p - n)
Messages postés
25
Date d'inscription
vendredi 11 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2004

En faisant comme ca lors de l'appel a SetDlgItemText mon prog plante suite a:

DEBUG ASSERTION FAILED

Le probleme provient de winocc.cpp

De l'interieur du Thread je n arrive pas a afficher une variable que le thread modifie..
Comment faire???

Mat
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Montre moi ton code stp, et d'ailleurs, ton code se compile ? Paske ds l'appel a SetDlgItemText, il manque un parametre, et ton cast ne 'transformera' pas ton entier en chaine de caractere comprehensible, donc stp montre ton code qu'on y mette de l'ordre (pas 200lignes, juste les fonctions en questions stp).

+2(p - n)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
AlexMAN> la syntaxe indique que c'est MFC, evidemment ce serait dit dans la question on gagnerait du temps.

Me semble que ymca2003 a repondu a cela il y a peu.

ciao...
BruNews, MVP VC++
Messages postés
25
Date d'inscription
vendredi 11 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2004

OK alors voila le monstre.

Dans le Thread

UINT Enregistreflux(LPVOID pParam)
{
CClientRTP1Dlg dlg;
UINT Timestamp= pack->GetTimestamp();
dlg.OnTimer();
}

Dans la fonction OnTimer()
void CClientRTP1Dlg::OnTimer()
{
SetDlgItemText(IDC_TIMESTAMP, LPCTSTR(Timestamp));
}

IDC_TIMESTAMP etant mon editbox a remplir.

Merci de ton aide

Mat
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
ok donc dsl, mais je pensais pas que '->' signifiait obligatoirement MFC, je pensais que ct une syntaxe du C++, dsl donc, mais n'empeche que son pb m'embete..
Enfin bon, dsl de ne pouvoir t'aider.

+2(p - n)
Messages postés
25
Date d'inscription
vendredi 11 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2004

J ai vu son code mais je ne l ai pas compris pour cela que je redemande.
Svp aide moi apres il faut encore que j affiche la video en temps reel j aimerais deja montrer les variables de l entete des paquets RTP.
Merci
Messages postés
25
Date d'inscription
vendredi 11 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2004

Je travaille bien sous les MFC avec Microsoft Visual Studio net.

J essaie tout ds tous les sens soit j ai des assertion failed ou sinon c est un acces en lecture ecriture qui bloque tout.
J sais plus quoi faire...
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Ca ne sert a rien de poser 2fois la mm kestion en kelk minutes sous 2formes differentes, et si tu n'as pas compris la premiere reponse, demande une explication (je ne pense pas ke ymca morde..), et continue sur le mm thread ! Donne un max d'infos sur ton pb, compilo, MFC/API, .net...etc

Bonne chance

+2(p - n)
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
me semble qu'il avait dit de passer une variable du controle directement au thread.

ciao...
BruNews, MVP VC++
Messages postés
25
Date d'inscription
vendredi 11 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2004

Voila le code demandé

[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] ;
}

Ce mec voit la vie en bleu je n y comprend rien...

Voici la reponse de YMCA2003

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)

Malheureusement il n est pas en ligne et ca fait un bout de tps que je bloque la dessus si vous pouvez m aider a boir la vie du coté BLUE.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
S'il te dit de faire ainsi (et c'est fort exact) alors en avant.
Passe pointeur de ta dialog en param du thread.

ciao...
BruNews, MVP VC++
Messages postés
25
Date d'inscription
vendredi 11 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2004

Tu peux un peu détaillé stp merci.
Messages postés
25
Date d'inscription
vendredi 11 juin 2004
Statut
Membre
Dernière intervention
20 novembre 2004

J ai trouve un Timer tourne a cote de mon thread il s appelle toutes les 500ms et la je peux faire un Updatedata(FALSE) tout simplement...