Accueil > Forum > > > > Ma fenêtre veut pas s'ouvrir... (MFC)
Ma fenêtre veut pas s'ouvrir... (MFC)
jeudi 24 avril 2008 à 15:29:06 |
Ma fenêtre veut pas s'ouvrir... (MFC)

Taurnil
|
Bonjour à tous, je suis actuellement sur un projet qui vise à piloter le port série à l'aide d'une petite interface utilisateur. Cette interface est réalisée à l'aide de la MFC de Visual C++ (je travaille avec la version 6.0). J'en arrive à mon problème : Dans mon programme (qui est en fait un temporisateur), je dois vérifier l'heure de l'horloge et si celle-ci est égale à l'heure rentrée par l'utilisateur dans la fenêtre, on envoie un "1" sur une des broches de mon port COM. Je teste donc l'heure en continu avec ce bout de programme : code :
while (true) { curTime = CTime::GetCurrentTime(); heure = curTime.GetHour(); //séparation heures-minutes minute = curTime.GetMinute(); if (heure == m_heurefermeture && minute == m_minutefermeture) { // Mise à 0 DTR EscapeCommFunction(g_hCOM, CLRDTR); PurgeComm(g_hCOM, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR); UpdateData(TRUE); } else if (heure == m_heureouverture && minute == m_minuteouverture) { //Mise à 1 DTR PurgeComm(g_hCOM, PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT); EscapeCommFunction(g_hCOM, SETDTR); } m_heure = heure; //affichage pour test m_minute = minute; UpdateData(FALSE); Sleep(30000);} return TRUE; // return TRUE unless you set the focus to a control }
Vous l'avez donc compris, la boucle se répète en continu toutes les 30 secondes. Mais le problème est là : J'ai l'impression que mon programme essaie de finir la boucle avant d'ouvrir ma fenêtre alors que celle-ci ne se termine jamais. Je sais pas comment faire, j'ai entendu parler de threads mais c'est encore un peu compliqué pour moi. Si quelqu'un trouve quelquechose d'autre, qu'il n'hésite pas. Sinon, un lien vers un tuto sur les threads serait le bienvenu (en français si c'est possible). A tous merci d'avance, si quelqu'un arrive à me sortir de là, je lui en serais (vraiment très reconnaissant).
|
|
vendredi 25 avril 2008 à 07:11:09 |
Re : Ma fenêtre veut pas s'ouvrir... (MFC)

louis14
|
pourquoi n'utilises tu pas les timers?
louis14
|
|
vendredi 25 avril 2008 à 09:23:02 |
Re : Ma fenêtre veut pas s'ouvrir... (MFC)

Taurnil
|
Salut Louis, à vrai dire si je n'utilise pas les timers, c'est parce que je ne connaissais pas. Quand tu parles de timers, tu parles de fonction du type SetTimer(blabla, durée, NULL); et KillTimer(blabla); ?
Si c'est de ça que tu parles, on ne peut utiliser ces fonctions (si j'ai bien compris), que pour travailler avec des intervalles de temps : et dans mon programme, l'utilisateur peut changer d'heure chaque jour, donc l'intervalle peut changer. De plus, l'utilisateur rentre une heure et pas un intervalle de temps.
Si c'était pas de ça dont tu parlais ou si tu n'es pas d'accord avec ce que j'ai dit, je suis évidemment ouvert à toutes critiques/suggestions.
Merci à tous d'avance.
|
|
vendredi 25 avril 2008 à 11:18:54 |
Re : Ma fenêtre veut pas s'ouvrir... (MFC)

Taurnil
|
Bon, je viens de tester quelque petites choses : la fenêtre ne s'ouvre toujours pas (ça serait trop beau  ) mais TOUT le reste du programme a l'air de fonctionner, si tant est qu'on rentre les heures d'ouverture et de fermeture directement dans le code. En effet, si j'initialise (par exemple) heure d'ouverture à 10h10 et heure de fermeture à 10h11, et bien mon électrovanne s'ouvre bien à 10h10 pour se fermer à 10h11. Il me manque plus que ma fenêtre pour pouvoir entrer les heures sans passer par la source...... De grâce..... J'y suis presque. Merci d'avance.
|
|
lundi 5 mai 2008 à 09:38:14 |
Re : Ma fenêtre veut pas s'ouvrir... (MFC)

Taurnil
|
J'avance plus, j'ai entendu parler de pompes à messages et de thread de travail à utiliser, si quelqu'un pouvait me mettre sur la voie de ce côté là ou même me trouver quelque chose d'autre, merci à lui de se manifester  . Voila, en attendant vos réponses qui, je l'espère seront nombreuses, veuillez agréer madame, mons...., une bonne journée à tous.
|
|
lundi 5 mai 2008 à 15:10:44 |
Re : Ma fenêtre veut pas s'ouvrir... (MFC)

Taurnil
|
Bon, bah ça marche, ma fenêtre s'ouvre et en même temps la boucle tourne.
J'ai toujours un probleme cependant, quand j'appelle UpdateData(FALSE ou TRUE) dans le thread j'ai ça qui sort :
error C2065: 'UpdateData' : undeclared identifier
Alors que quand j'appelle dans le main, pas d'erreur. Quelqu'un sait il pourquoi ?
Bon, si quelqu'un veut avoir plus de détail sur comment j'ai fais, envoyez moi un mp plutôt que de poster ici. Encore que comme ça ça fera un peu moins monologue.
Allez ++ et bonne journée a tous.
|
|
vendredi 16 mai 2008 à 11:29:20 |
Re : Ma fenêtre veut pas s'ouvrir... (MFC)

Taurnil
|
J'ai trouvé pourquoi j'avais le problème de UpdateData : undeclared identifier. En fait cette fonction est une fonction de CWnd, la fonction qui l'appelle doit donc être membre de CWnd ou d'une classe dérivant de CWnd. Bon, j'ai toujours un problème, je pense que j'aurais toujours pas de réponses mais bon (c'est mon 6ème post d'affilée) , je vous montre quand même les qques parties du programme qui posent problème : voilà ma déclaration de la fonction dans la classe CFenetre1Dlg:
class CFenetre1Dlg : public CDialog { // Construction public: CFenetre1Dlg(CWnd* pParent = NULL); // standard constructor void *__cdecl boucle(void*); [...] };
Ma fonction dans le main :
void* CFenetre1Dlg:: boucle(void*) { [...]//ma fonction boucle };
Et enfin la déclaration de ma fonction dans le thread :
pthread_create(&thread, NULL, __cdecl CFenetre1Dlg:: boucle, NULL);
Alors, avec ça, j'ai l'erreur suivante : error C2059: syntax error : '__cdecl' Donc, voilà, si quelqu'un sait comment régler le problème... Merci à lui de se manifester, bonne journée à tous ^^
|
|
vendredi 16 mai 2008 à 13:55:08 |
Re : Ma fenêtre veut pas s'ouvrir... (MFC)

Taurnil
|
J'ai relu un truc qui m'a fait corriger l'erreur précédente, en fait pthread_create exige une fonction libre ou une fonction membre statique. Donc j'ai redeclaré comme suit : Code : C
| staticvoid*__cdeclboucle(void*); |
L'erreur n'est plus là mais une nouvelle est apparue ... La voici :
error C2352: 'CWnd::UpdateData' : illegal call of non-static member function see declaration of 'UpdateData' Voilà... Merci mille fois si vous pouvez m'aider.
|
|
vendredi 16 mai 2008 à 15:58:27 |
Re : Ma fenêtre veut pas s'ouvrir... (MFC)

juju12
|
je suppose que ta fonction UpdateData tu l'appelles depuis boucle()? dans ce cas ça ne peut pas marcher puisque UpdateData() est fonction membre donc il faut une instance de classe (convention __thiscall), alors que boucle() est static donc ne concerne pas d'instance. Pour régler ce problème, ce que tu peux faire par exemple est passer un pointeur sur une instance de classe comme paramètre à ton thread et l'utiliser ainsi. Si c'était pas ça du tout  mets un peu plus de code...
|
|
vendredi 16 mai 2008 à 16:06:51 |
Re : Ma fenêtre veut pas s'ouvrir... (MFC)

Taurnil
|
En effet, j'appelle UpdateData depuis boucle, bah j'ai pas trop compris ce qu'il fallait que je change alors je te met le code de la fonction boucle et de l'appel par le thread ainsi que mon .h, c'est parti :
Fonction boucle:
void* CFenetre1Dlg:: boucle(void*Fenetre1Dlg) { while (true) { int heure,m_heurefermeture,minute,m_minutefermeture,m_heureouverture,m_minuteouverture,m_heure,m_minute;
AfxMessageBox("mise a jour 30 secondes",NULL); CTime curTime = CTime::GetCurrentTime(); heure = curTime.GetHour(); //séparation heures-minutes minute = curTime.GetMinute(); if (heure == m_heurefermeture && minute == m_minutefermeture) { EscapeCommFunction(g_hCOM, CLRDTR); PurgeComm(g_hCOM, PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR); AfxMessageBox("fermeture électrovanne", MB_ICONSTOP);
} else if (heure == m_heureouverture && minute == m_minuteouverture) { PurgeComm(g_hCOM, PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT); EscapeCommFunction(g_hCOM, SETDTR); AfxMessageBox("ouverture électrovanne", MB_ICONSTOP);
}
m_heure = heure; //affichage pour test m_minute = minute;
Sleep(30000); } UpdateData(TRUE);
return 0; }
Ensuite, l'appel de la fonction par le thread :
pthread_t thread;
pthread_create(&thread, NULL, CFenetre1Dlg:: boucle, NULL);
Et pour finir le code du .h
#if !defined(AFX_FENETRE1DLG_H__72AE1160_5639_400E_8E40_87DB8B00238F__INCLUDED_) #define AFX_FENETRE1DLG_H__72AE1160_5639_400E_8E40_87DB8B00238F__INCLUDED_
#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000
///////////////////////////////////////////////////////////////////////////// // CFenetre1Dlg dialog
class CFenetre1Dlg : public CDialog { // Construction public: CFenetre1Dlg(CWnd* pParent = NULL); // standard constructor
static void *__cdecl boucle(void*);
// Dialog Data //{{AFX_DATA(CFenetre1Dlg) enum { IDD = IDD_FENETRE1_DIALOG }; BOOL m_activer; int m_heurefermeture; int m_minutefermeture; int m_heureouverture; int m_minuteouverture; int m_heure; int m_minute; //}}AFX_DATA
// ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CFenetre1Dlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL
// Implementation protected: HICON m_hIcon;
// Generated message map functions //{{AFX_MSG(CFenetre1Dlg) virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); virtual void OnCancel(); afx_msg void Onapropos(); afx_msg void OnCheck1(); afx_msg void OnButton2(); afx_msg void OnButton3(); afx_msg void Onhautheurefermeture(); afx_msg void Onbahheurefermeture(); afx_msg void Onhautminutefermeture(); afx_msg void Onhautminuteouverture(); afx_msg void Onbasminuteouverture(); afx_msg void Onhautheureouverture(); afx_msg void Onbasheureouverture(); afx_msg void Onbasfermeturemin(); afx_msg void OnOuvrirelectrovanne(); afx_msg void OnFermerelectrovanne(); afx_msg void Onheureouvertureh(); afx_msg void Onheureouverturemin(); afx_msg void Onheurefermetureh(); afx_msg void Onheurefermeturemin(); afx_msg void OnChangeEdit5(); afx_msg void OnChangeEdit6(); afx_msg void OnButton9(); //}}AFX_MSG DECLARE_MESSAGE_MAP() };
//{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_FENETRE1DLG_H__72AE1160_5639_400E_8E40_87DB8B00238F__INCLUDED_)
|
|
Cette discussion est classée dans : true, minute, fenêtre, heure, purge
Répondre à ce message
Sujets en rapport avec ce message
aide c++ [ par jekburn ]
#include #include typedef struct{ int heure; int minute; int seconde;}TEMPS; TEMPS diff(TEMPS t1,TEMPS t2){ TEMPS t3; &n
conversion heure et minute en seconde [ par nazca ]
Le Zero de la programmationNazcacomment fait on pour convertir des heures et minutes en secondes car j'aimerais faire la difference entre 2 heures.mer
modifier login msn messenger en fonction de l heure [ par morgandetoi06 ]
bonjour, j aimerai savoir s'il est possible de faire un programme qui change automatiquement le login sur MSN messenger en fonction de l'heure du syst
Aide en java [ par Alex28 ]
En java, je créé une fenêtre de type JFrame avec des boutons et lors de l'appui de l'un de ces boutons, je veux qu'une autre fenêtre s'ouvre mais qu'e
[BCB]Empêcher l'execution multiple d'une fenêtre [ par thebeith ]
Salut,Je voudrais que l'appli que je développe ne puisse se lancer qu'une seule fois.Mais je n'arrive pas à empecher l'execution multiple de cette app
fenêtre sans barre de taches [ par garslouche ]
Bonjourje voudrais savoir comment faire pour qu'une fenêtre modale n'apparaisse pas dans la barre de taches.Merci
heure [ par Tautau ]
Bonjour a tous,Je souhaite iconifier mon appli avec un systemtray ca je sais faire mais le probleme c'est que je veux comme icone un comptarebour qui
cacher une fenêtre Dos [ par lysane ]
j'ai créer un serveur qui tourne sur une machine, mon appli se lance à l'ouverture d'une session seulement, visual studio ouvre par défaut une fenêtr
cacher une fenêtre [ par lysane ]
J'ai utilisée la fonction showwindow pour cacher ma fenêtre:ShowWindow(FindWindow("ConsoleWindowClass",NULL),SW_HIDE); sous win2000 pas de problème, s
lecture d'une video dans une fenêtre Animate [ par mistigwn ]
Bonjour!Je cherche la/les fonction(s) permettant d'ajuster la taille de mes videos dans une fenêtre de type Animation, cette dernière étant intégrée a
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : CXIMAGERE : CXIMAGE par rt15
Cliquez pour lire la suite par rt15
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|