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

Résolu
matge Messages postés 25 Date d'inscription vendredi 11 juin 2004 Statut Membre Dernière intervention 20 novembre 2004 - 19 nov. 2004 à 17:23
matge Messages postés 25 Date d'inscription vendredi 11 juin 2004 Statut Membre Dernière intervention 20 novembre 2004 - 19 nov. 2004 à 22:00
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

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 nov. 2004 à 20:25
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++
3
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
19 nov. 2004 à 18:39
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)
0
matge Messages postés 25 Date d'inscription vendredi 11 juin 2004 Statut Membre Dernière intervention 20 novembre 2004
19 nov. 2004 à 19:07
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
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
19 nov. 2004 à 19:12
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 nov. 2004 à 19:28
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++
0
matge Messages postés 25 Date d'inscription vendredi 11 juin 2004 Statut Membre Dernière intervention 20 novembre 2004
19 nov. 2004 à 19:32
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
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
19 nov. 2004 à 19:35
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)
0
matge Messages postés 25 Date d'inscription vendredi 11 juin 2004 Statut Membre Dernière intervention 20 novembre 2004
19 nov. 2004 à 19:37
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
0
matge Messages postés 25 Date d'inscription vendredi 11 juin 2004 Statut Membre Dernière intervention 20 novembre 2004
19 nov. 2004 à 19:39
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...
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
19 nov. 2004 à 19:39
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)
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 nov. 2004 à 19:42
me semble qu'il avait dit de passer une variable du controle directement au thread.

ciao...
BruNews, MVP VC++
0
matge Messages postés 25 Date d'inscription vendredi 11 juin 2004 Statut Membre Dernière intervention 20 novembre 2004
19 nov. 2004 à 19:49
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.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 nov. 2004 à 20:06
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++
0
matge Messages postés 25 Date d'inscription vendredi 11 juin 2004 Statut Membre Dernière intervention 20 novembre 2004
19 nov. 2004 à 20:10
Tu peux un peu détaillé stp merci.
0
matge Messages postés 25 Date d'inscription vendredi 11 juin 2004 Statut Membre Dernière intervention 20 novembre 2004
19 nov. 2004 à 22:00
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...
0
Rejoignez-nous