Page 2 sur 2

Re: [..] Sortie de boucle & plantage

Posté : mar. 13 mai 2014 23:40
par GaRydelaMer
@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

Re: [..] Sortie de boucle & plantage

Posté : mar. 13 mai 2014 23:56
par jchd
Voir l'aide de la dernière release ou beta, sinon ici ou bien .

Re: [..] Sortie de boucle & plantage

Posté : mer. 14 mai 2014 04:52
par aulus
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.
Les boutons [Stop] ne m'ont pas l'air efficaces.

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.

Re: [..] Sortie de boucle & plantage

Posté : mer. 14 mai 2014 09:24
par GaRydelaMer
aulus a écrit :Les boutons [Stop] ne m'ont pas l'air efficaces
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.

Re: [..] Sortie de boucle & plantage

Posté : mer. 14 mai 2014 10:41
par aulus
GaRydelaMer a écrit :
aulus a écrit :Les boutons [Stop] ne m'ont pas l'air efficaces
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.
Bonjour,

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
 
Cela me redonne espoir car dans votre code, au retour de la GUI fille, la boucle de la GUI mère ne plante pas. Dans mon message précédent, je vous indiquais que j'allais tirer partie de votre réussite pour voir par comparaison ce qui fait que dans mon propre code, la boucle de la GUI mère plante. C'est ce que je traduisais par "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."

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é.

Re: [..] Sortie de boucle & plantage

Posté : mer. 14 mai 2014 11:21
par GaRydelaMer
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.

Re: [..] Sortie de boucle & plantage

Posté : mer. 14 mai 2014 13:58
par aulus
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.

Re: [R] Sortie de boucle & plantage

Posté : mer. 14 mai 2014 18:04
par aulus
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.