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 15479 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 juin 2024 - 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

=
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.  
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]
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

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

Posez votre question
BunoCS Messages postés 15479 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 juin 2024 103
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
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
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
BunoCS Messages postés 15479 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 juin 2024 103
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
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?
BunoCS Messages postés 15479 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 juin 2024 103
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
Rejoignez-nous