While -> MFC ?

kikaktus Messages postés 5 Date d'inscription jeudi 12 avril 2007 Statut Membre Dernière intervention 4 juin 2007 - 1 juin 2007 à 12:01
BunoCS Messages postés 15391 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 18 septembre 2023 - 4 juin 2007 à 15:29
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

The_Guardian Messages postés 317 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 octobre 2007 1
1 juin 2007 à 12:16
Salut,

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

=
0
cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 25
1 juin 2007 à 12:17
Tu peux faire un thread avec un while qui analyse le port série et qui envoye les données a programme principal.  
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
1 juin 2007 à 13:40
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]
0
kikaktus Messages postés 5 Date d'inscription jeudi 12 avril 2007 Statut Membre Dernière intervention 4 juin 2007
1 juin 2007 à 13:46
je vais jeter un coup d'oeil aux threads, je reviendrai pour valider

merci
0

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

Posez votre question
BunoCS Messages postés 15391 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 18 septembre 2023 102
1 juin 2007 à 14:01
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
0
kikaktus Messages postés 5 Date d'inscription jeudi 12 avril 2007 Statut Membre Dernière intervention 4 juin 2007
4 juin 2007 à 14:13
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
0
kikaktus Messages postés 5 Date d'inscription jeudi 12 avril 2007 Statut Membre Dernière intervention 4 juin 2007
4 juin 2007 à 14:16
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
0
BunoCS Messages postés 15391 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 18 septembre 2023 102
4 juin 2007 à 14:25
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
0
kikaktus Messages postés 5 Date d'inscription jeudi 12 avril 2007 Statut Membre Dernière intervention 4 juin 2007
4 juin 2007 à 15:14
C'est justement ce que je redoutais... Comment faire alors pour acceder au champ EDIT? Une idée?
0
BunoCS Messages postés 15391 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 18 septembre 2023 102
4 juin 2007 à 15:29
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
0
Rejoignez-nous