While -> MFC ?

Signaler
Messages postés
5
Date d'inscription
jeudi 12 avril 2007
Statut
Membre
Dernière intervention
4 juin 2007
-
Messages postés
15015
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 avril 2021
-
Bonjour,

je suis débutant en MFC et en langage objet.

Je souhaite "convertir" mon code C existant vers un programme en MFC.
J'utilise le port serie, mais j'ai besoin d'aller vérifier régulièrement (évenement)la présence de données.
comment puis-je faire cela?

J'espère que ma question est assez clair, en faite je n'arrive pas à voir comment je peux faire en MFC ce que je faisait dans un while en C...

D'avance merci, et n'hésitez pas à me demander plus de détails si ce n'est pas suffisant.

Benjamin.

10 réponses

Messages postés
317
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
19 octobre 2007

Salut,

peux-tu poster le code avec le WHILE et la condition du WHILE ? ca nous aiderait

=
Messages postés
987
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
30 août 2012
22
Tu peux faire un thread avec un while qui analyse le port série et qui envoye les données a programme principal.  
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
Yop,

Oui est fait en C , tu faisait du pooling. Dans ce cas ci un thread le parait être la meilleur solution.
CreateThread sur la MSDN pour plus d'info :D

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
Messages postés
5
Date d'inscription
jeudi 12 avril 2007
Statut
Membre
Dernière intervention
4 juin 2007

je vais jeter un coup d'oeil aux threads, je reviendrai pour valider

merci
Messages postés
15015
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 avril 2021
94
Salut,
Si tu dois aller voir "régulièrement" ton port série, tu peux regarder également du côté des fonctions SetTimer() et OnTimer() je pense.

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
5
Date d'inscription
jeudi 12 avril 2007
Statut
Membre
Dernière intervention
4 juin 2007

J'ai regardé pour les threads, cela me semble être la bonne solution. Seulement je n'arrive pas à la mettre en oeuvre:

j'ai besoin de mettre à jour un champ EDIT depuis mon thread ( pour afficher les receptions/emissions RS232).
J'ai donc ajouté ma fonction thread à ma class Dlg (pour avoir accès à ma variable du champ EDIT), kle demarrage du thread se fait à l'appui d'un bouton.

j'ai cette erreur à la compilation :

error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'

J'arrive à compiler avec une fonction static, mais si je veux utiliser ma variable du champ EDIT j'ai :
C:\M2M\test\GSM\GSMDlg.cpp(292) : error C2597: illegal reference to data member 'CGSMDlg::m_strConsole' in a static member function

et avec m_strConsole en static :
error LNK2001: unresolved external symbol "public: static class CString CGSMDlg::m_strConsole" (?m_strConsole@CGSMDlg@@2VCString@@A)

void CGSMDlg::OnBUTTONDemarrer()
{
...
AfxBeginThread(RS232PollingThread,NULL,THREAD_PRIORITY_NORMAL,0,0,NULL);
...
}

UINT CGSMDlg::RS232PollingThread( LPVOID Param )
{
//récupération du paramètre
//CWnd * parent = (Cstring *) pParam;

//... code à exécuter en parallèle
m_strConsole = m_strConsole + "bonjour";
return 1;
}

Merci d'avance

Benjamin
Messages postés
5
Date d'inscription
jeudi 12 avril 2007
Statut
Membre
Dernière intervention
4 juin 2007

Je repost en essayant les passages à la ligne


J'ai regardé pour les threads, cela me semble être la bonne solution. Seulement je n'arrive pas à la mettre en oeuvre:

j'ai besoin de mettre à jour un champ EDIT depuis mon thread ( pour afficher les receptions/emissions RS232).

J'ai donc ajouté ma fonction thread à ma class Dlg (pour avoir accès à ma variable du champ EDIT), le demarrage du thread se fait à l'appui d'un bouton.

j'ai cette erreur à la compilation :

error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'

J'arrive à compiler avec une fonction static, mais si je veux utiliser ma variable du champ EDIT j'ai :

C:\M2M\test\GSM\GSMDlg.cpp(292) : error C2597: illegal reference to data member 'CGSMDlg::m_strConsole' in a static member function

et avec m_strConsole en static :

error LNK2001: unresolved external symbol "public: static class CString CGSMDlg::m_strConsole" (?m_strConsole@CGSMDlg@@2VCString@@A)

void CGSMDlg::OnBUTTONDemarrer()

{

...

AfxBeginThread(RS232PollingThread,NULL,THREAD_PRIORITY_NORMAL,0,0,NULL);

...

}

UINT CGSMDlg::RS232PollingThread( LPVOID Param )

{

//récupération du paramètre

//CWnd * parent = (Cstring *) pParam;

//... code à exécuter en parallèle

m_strConsole = m_strConsole + "bonjour"; return 1;

}

Merci d'avance

Benjamin
Messages postés
15015
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 avril 2021
94
Yo,
Une fonction devant être indépendante à l'aide de thread doit être static et donc ne dois pas être implémentée dans une classe

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
5
Date d'inscription
jeudi 12 avril 2007
Statut
Membre
Dernière intervention
4 juin 2007

C'est justement ce que je redoutais... Comment faire alors pour acceder au champ EDIT? Une idée?
Messages postés
15015
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
13 avril 2021
94
Avoir un pointeur sur la fenêtre contenant ton edit en variable globale...
Ou bien récupérer ton edit avec GetDlgItem()...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage