begin process at 2010 03 20 03:20:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Bouton non disponible...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Bouton non disponible...

vendredi 16 décembre 2005 à 11:00:49 | Bouton non disponible...

dbiare

Bonjour a tous Je développe une application industrielle en Visual C++6. Cette application pilote un process. Pendant le traitement, je dois pouvoir conserver la possibilité de stopper le process a l’aide d’un bouton (qui renvoie à une fonction qui bascule une variable booléenne) placer dans une boite de dialogue. Le problème est que pendant le traitement, le bouton n’est pas disponible puisque l’application est en traitement… Quelqu’un aurait–il une idée ? Merci
vendredi 16 décembre 2005 à 11:09:21 | Re : Bouton non disponible...

CoyoteVsBeepBeep

Membre Club

hello,
il faut que tu crées un thread avec des conditions de sortie si tu appuie sur le bouton.
ca te permet de rendre la main a ta fenetre et de detecter lesboutons pressés.

apres tu peux améliorer en mettant des variables globales d'etats qui te permettent de savoir ou tu en est de ton process en thread (genre une progress bar, ...) ou plusieur conditions de fin de thread, .....

création de ton thread:

DWORD  ThreadID;
 HANDLE thread ;
  
   thread =CreateThread( (LPSECURITY_ATTRIBUTES) NULL,0,
      (LPTHREAD_START_ROUTINE) fonction_thread,(LPVOID) 0,0, &ThreadID );
  
   SetPriorityClass(thread NORMAL_PRIORITY_CLASS);
  
   SetThreadPriority(thread ,THREAD_PRIORITY_NORMAL);
  
   if(Client_LaunchClient==NULL)
   {
      //error, fail to create thread
      MessageBox("Create Message Error (thread) !","Error",MB_ICONERROR);
   }


/**********************************************************************/
/****************                 THREAD               ****************/
/**********************************************************************/
void  fonction_thread()
{
   while(press_button==false)
   {
       // process
   }
  
   ExitThread(0);
 
}

et lorsque tu presse le bouton, tu fais:

press_button=true;

vendredi 16 décembre 2005 à 12:31:52 | Re : Bouton non disponible...

ricky78

Bonjour

Si dans  ton traitement tu a des boucles tres longues, il faut que tu l'aisse a l'os gerer tes messages pour que ton appli ne semble pas figé et que tu puisse appuyer sur les boutons

ajoute dans ta boucle

MSG msg;
    while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    {
     TranslateMessage(&msg);
     DispatchMessage(&msg);
    }


TOCHE
vendredi 16 décembre 2005 à 12:45:43 | Re : Bouton non disponible...

BruNews

Administrateur CodeS-SourceS
Il faut privilégier le traitement en thread, ce sera tout benef sur les architectures modernes multi processeurs ou hyper threading.

ciao...
[ Lien ]
BruNews, MVP VC++
vendredi 16 décembre 2005 à 13:36:09 | Re : Bouton non disponible...

dbiare

Re ;-) Merci bcp pour les bouts de code. Après avoir vue ce que sont les Treads j’ai essayée de comprendre comment ça marche et d’implanter cela… J’obtiens 2 erreurs à la compilation 1) sur : thread=CreateThread((LPSECURITY_ATTRIBUTES) NULL,0, (LPTHREAD_START_ROUTINE)fonction_thread,(LPVOID) 0,0, &ThreadID ); il donne : error C2440: 'type cast' : cannot convert from '' to 'unsigned long (__stdcall *)(void *)' Je crée une fonction dans la classe CThreadDlg donc : void CThreadDlg::fonction_thread() {…} et je déclare fonction_thread (et même si je déclare CThreadDlg::fonction_thread ca marche pas) 2) sur : if(Client_LaunchClient==NULL) { //error, fail to create thread } il donne : error C2065: 'Client_LaunchClient' : undeclared identifier La, j’ai aucune idée de ce que signifie : Client_LaunchClient ? :-/ Si quelqu'un a 5 mn a consacrer a ca, n’hésitez pas
vendredi 16 décembre 2005 à 14:07:53 | Re : Bouton non disponible...

BruNews

Administrateur CodeS-SourceS
fonction callback d'une classe doit être déclarée static.
Voir post de ymca2003, il a plusieurs fois expliqué comment implémenter cela.

Gaffe aux threads faits directement par API avec les allocs de classes dans le thread, il faut garantir l'appel aux destructeurs pour éviter les fuites mémoires en cas de sortie prématurée du thread. Il convient souvent d'utiliser __beginthreadex du CRT au lieu de l'appel API, le CRT assurera l'appel API, alloc et désalloc corrects.
Richter exwplique tout cela:
[ Lien ]
[ Lien ]

ciao...
[ Lien ]
BruNews, MVP VC++
vendredi 16 décembre 2005 à 14:20:42 | Re : Bouton non disponible...

CoyoteVsBeepBeep

Membre Club
autant pour moi, c'est un copié collé qui a raté.
Client_LaunchClient doit etre remplacé par thread. c'est ton handle.
si ton thread n'a pas été créé, ton handle vaut null. c'est pour le detecter.
vendredi 16 décembre 2005 à 14:22:59 | Re : Bouton non disponible...

CoyoteVsBeepBeep

Membre Club
ps: ma fonction void  fonction_thread() n'est pas une fonction de ma classe.
c'est une fonction independante. c'est pour cela qu'il faut des variable globale et non pas des variables de classe pour dialoguer avec (press_button)

voila voila.

un thread en fait c'est comme une application annexe et indépendante que tu lancerais dans ton programme.
il est attaché a ton prog, ce qui veut dire que si ton prog se termien, le thread aussi.



A+
vendredi 16 décembre 2005 à 15:44:46 | Re : Bouton non disponible...

dbiare

Ok j’ai bien compris que ce qu’il faut faire, pour le bien, c’est créer un dispositif multitâche a l’aide de Thread. J’en ai pas vraiment le temps dans l’immédiat : résultats oblige ! Mais je m’y affairerai ultérieurement… Pour l’instant, quand j’écris : MSG msg; while(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } Ca marche pas mal mais le problème c’est que cela donne un comportement bizarre du PC après que l’application a été lancée une première fois. Genre une compilation de l’appli donne une erreur de link alors que la compilation de l’appli, avant que l’appli soit lancée, fonctionne ok ? LINK : fatal error LNK1168: cannot open Debug/Application.exe for writing Quelqu’un a une idée ??
vendredi 16 décembre 2005 à 15:50:09 | Re : Bouton non disponible...

dbiare

Autre genre de trucs bizard : l’utulisation de l’UC reste en permanence a 100% ?

1 2

Cette discussion est classée dans : bouton, application, traitement, process, disponible


Répondre à ce message

Sujets en rapport avec ce message

Bouton d'arret d'urgence [ par tanguy_laverdure ] Bonjour, j'ai cree une application qui lorsqu'on appui sur un bouton lance un traitement. ce traitement peut être long et je souhaiterai avoir la poss rien dans la barre des taches [ par glipper ] Bonjour,j'aimerais ne pas afficher le bouton de mon application qui est dans la barre des taches (le bouton qui sert à reduire, agrandir etc). L'appli Status Process d une application windows [ par Trinita16 ] est il possible de savoir le status d une application qui tourne en tache de fond sous windows ? je m explique, je voudrais savoir si mon application comment faire disparaitre le bouton de l'application de la barre des taches? [ par badrbadr ] Bon, voila : chaque programme a un bouton dans la barre des taches lors de leur lancement.comment on peut faire disparaitre ce bouton de mon applicati Lecture d'un fichier .avi [ par seb2086 ] Bonjour,je voudrait savoir comment faire ,dans une application MFC,pour lancer la lecture d'une vidéo au format AVI lorsque je clique sur un bouton. ( Détecter une erreur dans un process ? [ par chuckboy ] Bonjour à tousJe cherche à détecter une erreur dans un process externe.J'explique , je lance un process "CreateProcess(NULL, (LPTSTR)sExecutable.c_str Problème avec le bouton "réduire" [ par marcootz ] Bonjour, J'ai une application "A" que j'ai créé avec bcb6. A partir d'une autre de mes application j'ai un bouton qui sert à maximiser la fenetre de traitement des données ascii-urgentttt- [ par anonyme80 ] bonjour,dans le cadre de mes études , je dois réaliser une application au format DLL ( en c++) , cette application est appelée par l'envoi ou la lectu application traitement d'images Matlab [ par hajarino ] Bonjour, Mon projet porte sur le traitement d'images et plus exactement sur les opérateurs morphologiques, la segmentation, reconnaissance de formes, Traitement des messages (win32) [ par Dorgendubal ] Bonjour,j'ai un petit probleme de traitement des messages sous win32 (sans MFC !). Quand je crée un nouvel objet (bouton, edit,...) avec CreateWindow(


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales