Accueil > Forum > > > > controller l'execution d'une fonction
controller l'execution d'une fonction
dimanche 2 novembre 2008 à 03:12:59 |
controller l'execution d'une fonction

ebrainis
|
Salut, je programme un interface graphique qui permette à un utilisateur de controler l'execution d'une fonction. Comme je suis débutant, j'ai trouvé plus facile d'utiliser les MFC plutot que les API. J'ai utilisé Visual studio pour m'aider à créer la fenetre principale et j'ai créé des menus. En particulier, un menu Run contenant les items : Start, Stop et Pause. Je voudrais que la fonction s'execute lorsque l'utilisateur clic sur Start, qu'elle se termine lorsqu'il appuye sur Stop et se suspende lorsqu'il appuye sur pause. Le soucis est que si je lance la fonction à partir de OnRunStart(), l'interface graphique est figé tant que la fonction ne se termine pas. (Dans mon cas, elle ne se termine jamais car elle contient une boucle.) Alors comment faire? En regardant un peu sur le forum, j'ai vu qu'on y parlait d'utiliser des threads, mais je ne sais pas trop ce que c'est, ni si cela s'applique à mon problème. (C'est mon premier programme pour Windows Javascript:Insert_Emoticon('/imgs2/smile_big.gif');) Si quelqu'un pouvait me suggérer quelques solutions, ce serait sympa.
|
|
dimanche 2 novembre 2008 à 10:15:04 |
Re : controller l'execution d'une fonction

BruNews
|
Un long traitement se fait dans un thread séparé pour ne pas bloquer l'interface graphique qui est dans ton thread primaire.
ciao... BruNews, MVP VC++
|
|
dimanche 2 novembre 2008 à 11:18:15 |
Re : controller l'execution d'une fonction
|
dimanche 2 novembre 2008 à 11:25:21 |
Re : controller l'execution d'une fonction

BruNews
|
Il doit chercher des exemples avec AfxBeginThread(). En utilisant directement l'API, il n'aurait aucun constructeur ni destructeur de classe appelé donc graves fuites de mémoire.
ciao... BruNews, MVP VC++
|
|
lundi 3 novembre 2008 à 23:46:22 |
Re : controller l'execution d'une fonction

ebrainis
|
Merci pour vos réponses. Je vais regarder de ce pas comment marchent les threads. Cela dit, j'ai entretemps imaginé une autre stratégie et je voudrais avoir votre avis là dessus. Au lieu de lancer ma fonction à partir de OnRunStart(), je n'utilise OnRunStart() que pour assigner une valeur arbitraire START à une variable m_run. Je passe ensuite cette variable à la fonction OnIdle() [membre de ma classe "Application"] et je lance ma fonction à partir de OnIdle() si m_run ==START. De cette manière ma fonction tourne en boucle tant qu'il n'y a pas de nouveaux messages (ce que je veux) et répond à chaque injonction Start, Stop ou Pause. Est-ce que cette solution est meilleure ou moins bonne que d'utiliser une nouvelle thread? Qu'en pensez-vous?
|
|
mardi 4 novembre 2008 à 09:04:12 |
Re : controller l'execution d'une fonction
|
mardi 4 novembre 2008 à 21:54:12 |
Re : controller l'execution d'une fonction

ebrainis
|
Salut à tous, J'ai essayé les threads et ca marche très bien. Je lance la thread secondaire avec AfxBeginThread(), je mets l'application en pause avec SuspendThread() et la réactive avec ResumeThread(). Par contre, je le plus grand mal du monde à trouver une façon d'intérompre la thread. Pourquoi n'y a -t-il pas une gentille fonction qui fait ce boulot là ? (Enfin, autre que TerminateThread() car celle-là ne nettoie derrière elle). Qui sait comment faire cette opération ?
|
|
mercredi 5 novembre 2008 à 09:16:55 |
Re : controller l'execution d'une fonction
|
mercredi 5 novembre 2008 à 17:30:46 |
Re : controller l'execution d'une fonction

ebrainis
|
Je crois que je comprend le principe de l'arret par une variable ou un event (CEvent). C'est lorsque j'essaye de l'appliquer que ca foire. La fonction que je veux executer dans un thread secondaire doit recevoir des parametres. Or ces parametres sont determines par l'utilisateur dans une boite de dialogue non modale. En clair, ces parametres sont des membres proteges d'une classe de dialogue. Avant que vous ne m'aiguiyiez vers les conditions d'arret, j'utilisais le pointeur pParam de AfxBeginThread(funcProc, pParam, ....) pour pointer vers ma classe de dialogue pour acceder a ces variables, mais maintenant je dois l'utiliser pour passer un 'event'. Du coup, je me suis dit pourquoi ne pas faire ma function funcProc membre de la classe de Dialogue. C'est meme plus logique. Mais la ca ne marche plus (erreurs de compilation). Voici comment mon code principal est structure:
Dans mon Document.cpp: #include monDialog.cpp //De cette maniere j'ai les declarations et les definitions des fonctions /// Plein de code ......... void CdmdControllerDoc::OnRunStart() if ((m_Program !=NONE)&& (m_Run!=START)) { m_Run=START; //Create the thread (pDlg est un pointeur vers mon dialogue) m_pWorkThread =AfxBeginThread(pDlg->funcProc, pParam,THREAD_PRIORITY_LOWEST); // pParam sera vraisemblablement un CEvent* } void CdmdControllerDoc::OnRunStart() if ((m_Program !=NONE)&& (m_Run!=STOP) { m_Run=STOP; //Faire ce qui s'impose pour dire a la thread secondaire de se terminer } void CdmdControllerDoc::OnRunPause() { if (m_Run!=PAUSE) { m_Run=PAUSE; m_pWorkThread->SuspendThread(); } else { m_Run=START; m_pWorkThread->ResumeThread(); } } Dans mon monDialogue.cpp
// This is the function that implements the Test program UINT CmonDialog::funcProc(LPVOID pParam) { _cprintf("I'm in Prog_Test"); int i=0; for (i=0;i<1e5;i++) {_cprintf("%d",i); } return 0; } Visual Studio me donne le message d'erreur error C3867: 'CmonDialog::funcProc': function call missing argument list; use '&CmonDialog::funcProc' to create a pointer to member Que faut-il faire dans ce cas la? Quand j'aurai fini par faire marcher cette thread, il faudra que je poste un exemple car ca manque cruellement.
|
|
jeudi 6 novembre 2008 à 09:04:34 |
Re : controller l'execution d'une fonction
|
Cette discussion est classée dans : fonction, programme, execution, controller, termine
Répondre à ce message
Sujets en rapport avec ce message
Fonction While multiple [ par oshin ]
Salut tout le monde,J'ai un problème tout bête..Dans mon programme j'ai inclus une fonction "While(1)" donc infini.. le probleme c'est que lorsque le
Execution d'un script BASH à partir d'un programme en C [ par GyOm2221 ]
Bonjour, Le principal est dans le titre, je cherche à faire un système de client/serveur , la communication fonctionne, mais pas moyen d'executer un s
j'applique ce programme mé ca fonction pa le problemes et tjrs au niveau de getch(); me donne erreur????????? [ par perledumaroc ]
#include#includeint main(){ int x; printf("entrer la valeur de x"); scanf("%d", & x); x+=21; printf("la valeur de x=%d",x); getch
fonction dans dll qui fait planter programme [ par pitch069 ]
Bonjour,je travail actuellement sur un code C++, sous dev c++. j'utilise une dll au travers d'un *.lib et dans mon programme principal je fais appel a
suppression des fichiers [ par boualiasma ]
Bonjour, Je voulais supprimer totalement à partir de mon programme C sous windows tous les fichiers textes temporaires dans mon répertoire de travail
Problème à l'execution [ par echec ]
Bonjour,J'ai pris il n'y a pas longtemps un programme c++, recréant le principe du jeu des chiffes et des lettres. Lorsque je le compile, je n'ai aucu
fichier généré lors de l'execution d'un programme [ par lilly91 ]
Bonjour,Dans le cadre de mon stage, j'aimerais savoir qu'elles sont les fichiers généré en règle générale lors de l'éxécution d'un programme, qu'elles
Définir un point d'entrée [ par Havy ]
Bonjour, sachant que tout programme console doit contenir la fonction main pour fonctionner, car c'est le point d'entrée, je voudrais savoir s'il est
Thread ? [ par galax98 ]
Bonjour Une petite question sans doute basique mais je n'arrive pas à m'en sortir. J'ai développé une application Windows sous dev-cpp, avec notamment
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|