[R] Sortie de boucle & plantage
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
-
GaRydelaMer
- Niveau 7

- Messages : 450
- Enregistré le : mer. 18 mars 2009 22:12
- Localisation : Montpellier
- Status : Hors ligne
Re: [..] Sortie de boucle & plantage
@jchd
j'ai pas suivi l'actualité de autoit depuis quelques temps, mais je prends note, (si tu as un lien ?) j'utilise que le mode événementiel ça m’intéresse
j'ai pas suivi l'actualité de autoit depuis quelques temps, mais je prends note, (si tu as un lien ?) j'utilise que le mode événementiel ça m’intéresse
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Sortie de boucle & plantage
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Re: [..] Sortie de boucle & plantage
Les boutons [Stop] ne m'ont pas l'air efficaces.GaRydelaMer a écrit :Je confirme que c'est la solution, car en mode événementiel et l'utilisation de de boucle infini c'est la seule solution proposer par AutoIt pour interpréter des messages que windows va envoyer.
Voila du code pour jouer avec les 2 cas commente la ligne GUIRegisterMsg. Dans un autre cas commente la boucle dans la fonction.
De mon côté, j'ai testé tout ce qui a été proposé. Mon propre programme ne plante plus au sortir de la boucle de la GUI fille. Il me reste un souci au niveau de la GUI mère qui contient elle aussi une boucle (celle-ci ne faisant pas appel à une base SQLite mais à un fichier texte). Cette boucle-là ne plante pas si je la lance avant d'ouvrir la GUI fille, mais plante si je la lance après avoir ouvert puis fermé la GUI fille. Le dernier code de GaRydelaMer proposant lui aussi une boucle dans la GUI mère, je vais tenter d'exploiter son code pour voir si mon problème se résout.
-
GaRydelaMer
- Niveau 7

- Messages : 450
- Enregistré le : mer. 18 mars 2009 22:12
- Localisation : Montpellier
- Status : Hors ligne
Re: [..] Sortie de boucle & plantage
Alors la je comprends pas ce que tu veux dire. J'ai pris de mon temps pour te répondre et toi tu n'as pas l'air d'avoir utiliser mon code dans une nouveau fichier et de l'avoir exécuter depuis scite ni de l'avoir lu. De plus j'ai mis une boucle infini non pas dans la gui principale mais dans la gui fille.aulus a écrit :Les boutons [Stop] ne m'ont pas l'air efficaces
Re: [..] Sortie de boucle & plantage
Bonjour,GaRydelaMer a écrit :Alors la je comprends pas ce que tu veux dire. J'ai pris de mon temps pour te répondre et toi tu n'as pas l'air d'avoir utiliser mon code dans une nouveau fichier et de l'avoir exécuter depuis scite ni de l'avoir lu. De plus j'ai mis une boucle infini non pas dans la gui principale mais dans la gui fille.aulus a écrit :Les boutons [Stop] ne m'ont pas l'air efficaces
J'ai dû bien mal m'exprimer dans mon dernier message pour que vous l'ayez lu d'une manière si négative. Je m'en excuse et tente de mieux m'expliquer.
J'ai testé tous les codes proposés :
1. celui de TommyDDR du 12 mai (16:22)
2. le vôtre du 13 mai (10:54)
3. le vôtre du 13 mai (21:52)
Les codes 1 et 2 fonctionnent bien : à la sortie de la boucle de la GUI fille, je retrouve bien la main sur la GUI mère. Toutefois, sur cette GUI mère, si je lance une boucle, celle-ci plante. Et cela uniquement si je lance cette boucle après avoir ouvert et fermé la GUI fille. Tant que je n'ouvre pas la GUI fille, la boucle de la GUI mère ne plante pas.
A la lecture de votre code d'hier 21 h 52, je m'aperçois que votre code contient une boucle aussi dans la GUI mère avec un bouton [Stop] :
Code : Tout sélectionner
While 1
GUICtrlSetData($lbl1, "b1=>" & @HOUR & ":" & @MIN & ":" & @SEC)
If $hGUI2 Then
GUICtrlSetData($lbl2, "b1=>" & @HOUR & ":" & @MIN & ":" & @SEC)
EndIf
Sleep(10)
WEnd
Func GUI_Main()
$hGUI1 = GUICreate("GUI principale")
GUISetOnEvent($GUI_EVENT_CLOSE, "GUIS_Close")
GUICtrlCreateButton("Ouvrir GUI enfant", 10, 10)
GUICtrlSetOnEvent(-1, "GUI_Child")
$lbl1 = GUICtrlCreateLabel("", 10, 50, 100, 20)
$bt_stop1 = GUICtrlCreateButton("Stop", 10, 70)
GUICtrlSetOnEvent(-1, "My_Event_Stop")
GUISetState()
EndFunc
Vous dites ne pas avoir inclus une boucle dans la GUI mère alors que les heures défilent sur la GUI mère... Là, c'est moi qui ne comprends pas. Et le bouton [Stop] ne stoppe pas le défilement des heures. Même chose sur la GUI fille. Les boutons [Stop] font-ils leur boulot chez les autres testeurs ?
Quoi qu'il en soit, je vous remercie beaucoup beaucoup pour votre temps et votre patience et m'excuse pour mes messages manquant de clarté.
-
GaRydelaMer
- Niveau 7

- Messages : 450
- Enregistré le : mer. 18 mars 2009 22:12
- Localisation : Montpellier
- Status : Hors ligne
Re: [..] Sortie de boucle & plantage
Désolé d'avoir mal compris ton message.
Mais justement j'attire ton attention que lors de la création de la gui fille, qui contient une boucle infini dans la fonction, la boucle principale est interrompu (elle plante pas), tant que la boucle de la gui fille tourne. C'est pour cela que je t'ai créer ce code qui te démontre que c'est une mauvaise idée d'utiliser des boucles infinis dans des fonctions mais qu'il est possible tout de même de interrompre avec ma 1ère affirmation en utilisant GUIRegisterMsg comme tu le demandais.
La boucle B2 (dans la fonction GUI FIlle) bloque la boucle principale "B1" qui laisse ton programme tourné, une fois celle ci stopper elle reprends son rôle afficher l'heure dans la GUI principale et si la GUI Fille existe elle l'affiche également remarque le format dans le label "B1" ou B2" plus l'heure.
Le bouton Stop arrête la boucle "B2" uniquement (dans mon exemple).
Notre erreur à tous les 2 c'est d'avoir mal compris le mot "plante", pour moi ça plante pas la boucle "B1" est interrompu par l’exécution de la boucle "B2", ou plutôt bloqué ou dans l'attente de la fin de la boucle "B2", c'est le fonctionnement normal d'AutoIt.
Mais justement j'attire ton attention que lors de la création de la gui fille, qui contient une boucle infini dans la fonction, la boucle principale est interrompu (elle plante pas), tant que la boucle de la gui fille tourne. C'est pour cela que je t'ai créer ce code qui te démontre que c'est une mauvaise idée d'utiliser des boucles infinis dans des fonctions mais qu'il est possible tout de même de interrompre avec ma 1ère affirmation en utilisant GUIRegisterMsg comme tu le demandais.
La boucle B2 (dans la fonction GUI FIlle) bloque la boucle principale "B1" qui laisse ton programme tourné, une fois celle ci stopper elle reprends son rôle afficher l'heure dans la GUI principale et si la GUI Fille existe elle l'affiche également remarque le format dans le label "B1" ou B2" plus l'heure.
Le bouton Stop arrête la boucle "B2" uniquement (dans mon exemple).
Notre erreur à tous les 2 c'est d'avoir mal compris le mot "plante", pour moi ça plante pas la boucle "B1" est interrompu par l’exécution de la boucle "B2", ou plutôt bloqué ou dans l'attente de la fin de la boucle "B2", c'est le fonctionnement normal d'AutoIt.
Re: [..] Sortie de boucle & plantage
Merci à tous pour vous être investis dans la solution du dysfonctionnement.
Il me reste un souci avec ma boucle lancée à partir de la GUI mère, comme exposé plus haut, mais le problème ne semble pas lié au type de dysfonctionnement objet de ce fil.
Je passe donc ce fil en Résolu.
Il me reste un souci avec ma boucle lancée à partir de la GUI mère, comme exposé plus haut, mais le problème ne semble pas lié au type de dysfonctionnement objet de ce fil.
Je passe donc ce fil en Résolu.
Re: [R] Sortie de boucle & plantage
Comme je le pensais, ce problème de boucle dans la GUI mère avait une cause sans lien avec ce fil. Au retour, le pointeur de fichier se trouvait à la fin du fichier lu précédemment. L'ajout, avant la boucle, de la fonction FileSetPos($hFileRead, 0, 0) a réglé le problème. Tout fonctionne maintenant à merveille. J'ai encore beaucoup appris par ce fil. Je réitère mes remerciements à tous.
