[R] Sortie de boucle & plantage

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Sortie de boucle & plantage

#21

Message 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
Avatar du membre
jchd
AutoIt MVPs (MVP)
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

#22

Message par jchd »

Voir l'aide de la dernière release ou beta, sinon ici ou bien .
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] Sortie de boucle & plantage

#23

Message 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.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Sortie de boucle & plantage

#24

Message 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.
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] Sortie de boucle & plantage

#25

Message 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é.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Sortie de boucle & plantage

#26

Message 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.
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] Sortie de boucle & plantage

#27

Message 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.
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [R] Sortie de boucle & plantage

#28

Message 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.
Répondre