Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1806 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Avoir la main pendant une exécution

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Avoir la main pendant une exécution

n°1364078
bubulle63
Posté le 11-05-2006 à 11:26:41  profilanswer
 

Bonjour,
 
je travail sur une application SDI développée sous Visual C++.
Dans mon application j'ai deux boutons:
-Executer : qui me permet de lancer mon application (envoie et reception de données par le port COM)
-Arrêter : pour arrêter le transfert de ses données quand j'appuie dessus.
 
mon problème est que une fois que mon transfert de données est en cours, si j'appuie sur le bouton arrêter ça na marche pas. Mon bouton n'a aucun effet.
 
En fait, lorsque j'appuie sur le bouton Arrêter, mon programme est sensé mettre une variable à TRUE. Et dans ma boucle d'exécution, je teste si la variable est à TRUE. Si c'est le cas, normalement, j'arrête mon programme. Hors en réalité, mon programme s"execute j'usqu'à la fin.
 
Je comprend pas pourquoi.
Avez vous des idées?

mood
Publicité
Posté le 11-05-2006 à 11:26:41  profilanswer
 

n°1364082
_darkalt3_
Proctopathe
Posté le 11-05-2006 à 11:30:40  profilanswer
 

utiliser des threads

n°1364087
bubulle63
Posté le 11-05-2006 à 11:34:02  profilanswer
 

c'est ce que je suis en train de voir, mais je n'en ai jamais utilisé et j'ai un peu de mal a comprendre comment ça fonctionne exactement

n°1364092
_darkalt3_
Proctopathe
Posté le 11-05-2006 à 11:39:05  profilanswer
 

Tout est dans la msdn, y'a des exemples, etc.
Reviens si tu as des soucis concrets.

n°1364097
bubulle63
Posté le 11-05-2006 à 11:44:18  profilanswer
 

Ok merci, en fait je suis déjà dans la MSDN, et si j'ai un soucis...

n°1364140
bubulle63
Posté le 11-05-2006 à 12:26:46  profilanswer
 

En fait, je comprend pas trop comment je dois m'y prendre avec mes deux boutons.  
 
C'est vrai qu'il n'y a pas beaucoup d'explication pour travailler avec des threads sur le net en C++, par contre en Java...ça y'en a!
 
Bref, est-ce que je dois faire un thread pour chaque bouton? Ou un seul thread qui appel la fonction du bon bouton au bon moment?

n°1364178
jan san ka​r
profil : pas le bon
Posté le 11-05-2006 à 13:23:08  profilanswer
 

Tu fais un thread qui communique sur ton port et l'autre gere tes boutons... Non ?

n°1364188
_darkalt3_
Proctopathe
Posté le 11-05-2006 à 13:45:13  profilanswer
 

ou un seul bouton qui démarre et arrete le thread ?

n°1364233
jan san ka​r
profil : pas le bon
Posté le 11-05-2006 à 14:50:57  profilanswer
 

un seul bouton pour deux action c'est risqué car :
"il ne faut pas prendre les utilisateurs pour des boulets incultes mais il ne faut pas oublier qu'ils le sont"
:o

n°1364243
bubulle63
Posté le 11-05-2006 à 14:57:29  profilanswer
 

il me faut forcement deux boutons
Par contre, si vous savez m'expliquer comment je dois procéder pour intégrer ma fonction qui exécute dans un thread et où je dois mettre ça dans mon programme ça m'aidera peut-être à y voir plus clair car je ne trouve pas ce genre de chose dans la MSDN (seulement les fonctions).  
Je n'arrive pas à trouver d'explication sur un fonctionnement global des thread, ou comment on les utilises exactement,... Mais si quelqu'un a un bon cours de débutant je suis prenneuse, je pense que ça m'aiderait beaucoup et que ça m'éviterait de poser des questions stupides. :pt1cable:  
 

mood
Publicité
Posté le 11-05-2006 à 14:57:29  profilanswer
 

n°1364248
_darkalt3_
Proctopathe
Posté le 11-05-2006 à 15:00:30  profilanswer
 

jan san kar a écrit :

un seul bouton pour deux action c'est risqué car :
"il ne faut pas prendre les utilisateurs pour des boulets incultes mais il ne faut pas oublier qu'ils le sont"
:o


 
pas mal :o

n°1364249
_darkalt3_
Proctopathe
Posté le 11-05-2006 à 15:01:17  profilanswer
 

ben
-création de thread,
- lancement de l'execution du thread, en tache de fond
- evenement quand le thread se termine.

n°1364254
elsed
Posté le 11-05-2006 à 15:04:46  profilanswer
 

bubulle63 a écrit :

Bonjour,
 
je travail sur une application SDI développée sous Visual C++.
....
 
Je comprend pas pourquoi.
Avez vous des idées?


 
 
tu peux aussi utiliser le mecanisme de "traitement de la boucle d'inactivité".
Expliqué ici dans la msdn en français : http://msdn.microsoft.com/library/ [...] essing.asp
 
grossierement, voila ce que tu fais dans ta boucle de traitement d'envoi et de reception de message par exemple :  
 

Code :
  1. MSG m_msg;
  2. // BOUCLE DE TRAITEMENT
  3. while( bool ) {
  4.   // Gestion des messages windows (stop, affichage)
  5.   while(PeekMessage(&m_msg,NULL,0,0,PM_REMOVE)) {
  6.     TranslateMessage(&m_msg);
  7.     DispatchMessage(&m_msg);
  8.   }
  9.  
  10.   // Fais tes traitements
  11.   .....
  12. } // END OF WHILE


 
si une iteration de traitement est rapide, tu peux ne faire cette gestion de message qu'une fois toute les n boucles par exemple.
 
Edit : Une petite explication tout de meme :  
Quand tu clique sur ton bouton arreter, windows envoie un message a ton application pour lui signifier cet evenement (click), mais comme ton application est occupé dans un traitement, elle ne reçoit pas ce message.
La boucle donnée dans l'exemple force la consommation des messages eventuellement en attente par ton application.


Message édité par elsed le 11-05-2006 à 15:13:34
n°1364393
bubulle63
Posté le 11-05-2006 à 16:35:22  profilanswer
 

En fait c'est pas mal ton idee
mais ça me fait une tout p'tit problème, c'est que quand j'apuie sur mon bouton Arrêter, le programme s'arrête toujours au même endroit même si j'appui pas au même moment. ???

n°1364845
elsed
Posté le 12-05-2006 à 10:34:16  profilanswer
 

bubulle63 a écrit :

En fait c'est pas mal ton idee
mais ça me fait une tout p'tit problème, c'est que quand j'apuie sur mon bouton Arrêter, le programme s'arrête toujours au même endroit même si j'appui pas au même moment. ???


 
Ben tu fais comme tu avais pensé au début, tu mets a jour une variable booleene a TRUE que tu vérifies a chaque fois dans ta boucle de traitements.  
 

Code :
  1. while( ! traitement_fini && ! click_sur_stop){
  2.   // Gestion des messages windows (stop, affichage)   
  3.   while(PeekMessage(&m_msg,NULL,0,0,PM_REMOVE))    {   
  4.     TranslateMessage(&m_msg);   
  5.     DispatchMessage(&m_msg); 
  6.   }   
  7.   // Fais tes traitements  .....
  8. }

n°1364872
_darkalt3_
Proctopathe
Posté le 12-05-2006 à 10:49:00  profilanswer
 

Du coup, c'est plus portable, ne pas l'oublier :o

n°1364879
bubulle63
Posté le 12-05-2006 à 10:52:35  profilanswer
 

Oui c'est comme ça que je fais. :)  
 
Je pensait que le problème venait du fait qu'il faut attendre qu'une instruction de mon traitement se termine avant de tester mon bouton stop mais apparement ça s'arrête un peu quand ça veut.
 
J'ai aussi l'impression que plus j'ai d'instructions dans mon traitement plus mon bouton stop est précis dans l'endroit où il s'arrête.
 
C'est un peu bizzar, je pensait que vu comment mon programme est fait, dès que j'appui sur mon bouton, le traitement serait interrompu avant la prochaine instruction... :heink:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Avoir la main pendant une exécution

 

Sujets relatifs
probleme d'execution de macros à l'ouverture d'excelErreur d'execution de requettes sous sql server
Probleme d'execution JS (Via AJAX)XML/XSL Probleme de vitesse d'execution Javascript
[C] Calculer le temps d'exécution d'une boucle.Problème avec fwrite() : besoin d'un coup de main
PB d'execution de classe, erreur lors de compilation etudiant en actioExecution d'un void main(args[]) en java et valeur retour
Pbl l'éxécution java HelloWorlApp message :"Exception in thread"main".Lancer un prog puis reprendre la main après exécution de ce dernier
Plus de sujets relatifs à : Avoir la main pendant une exécution


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR