|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Bouton non disponible... [ Archives / Au secours ] (dbiare)
Informations & options pour cette discussion
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é 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
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(
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,
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|