Accueil > Forum > > > > Bouton non disponible...
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
|
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
|
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
|
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
|
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
|
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% ?
|
|
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(
Livres en rapport
|
Derniers Blogs
COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ?MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ? par junarnoalg
La prochaine session de MyTIC aura lieu à Namur, le 23 mars prochain. Pendant presque une heure, nous parlerons de SharePoint 2010. Voici un aperçu du programme.
Accueil : 17h30 Début de la session : 18h00 - Les nouvelles int...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
ERREUR DE POINTEURERREUR DE POINTEUR par africanwinners
Cliquez pour lire la suite par africanwinners CLISTCTRLCLISTCTRL par dorras7
Cliquez pour lire la suite par dorras7
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|