Page 1 sur 1

[R] Stopper une boucle !

Posté : mer. 17 déc. 2008 18:19
par joker
Voilà, j'ai un gros soucis, j'ai une fonction lancé par une boucle, mais cette boucle ne veut jamais ce stopper, donc je ne peux ni fermer, ni effacer mes inputs.

C'est un boucle dans une autre, donc je pense que la deuxieme boucle prend emprise sur la premier, et donc elle ne fonctionne pas ensemble, comment faire pour que deux boucle fasse ça ensemble ?

Code : Tout sélectionner

While 1
$case = GuiGetMsg()
    Select
        Case $case = $GUI_EVENT_CLOSE
            Exit
        Case $case = $Button2
            while 2
                $debut = GuiCtrlRead ($Input1)
                $perso = GuiCtrlRead ($Input5)
                $fin = GuiCtrlRead ($Input2)
                $TAB = GuiCtrlRead ($Input4)
                $depart = GuiCtrlRead ($Input6)
                $temp = GuiCtrlRead ($Input7)
                env() ; on lance le script
                sleep($temp*60000) ; On attend une minut
                    Select
                        $case = GuiGetMsg()
                        Case $case = $Button3
                            ExitLoop
                    EndSelect
            Wend
        Case $case = $Button1
            GuiCtrlSetData ($Input1, "http://")
            GuiCtrlSetData ($Input2, "")
            GuiCtrlSetData ($Input4, "0")
            GuiCtrlSetData ($Input5, "")
            GuiCtrlSetData ($Input6, "")
    EndSelect
WEnd

Re: [...] Stopper une boucle !

Posté : mer. 17 déc. 2008 18:37
par timmalos
Il faut toujours EVITER ABSOLUMENT DE mettre 2 boucles: de plus, quand on met While 1, ce n'est pas pour le numéroter, comme vous avez mis votre While 2 (qui m'a bien fait rire :wink: ), mais car on veut que la boucle soit infinie, or 1 est toujours vrai (reference aux boleens).

While 2 va marcher, mais c'est vraiment pas joli :)

J'ai essayé de passer par les Timer, qui contrairement aux sleep ne bloquent pas le script, mais ca devenait trop compliqué et je n'ai pas votre script complet, donc je voulais eviter mais voila le script qui marche avec des mini-thread (2 boucles en meme temps)

Code : Tout sélectionner

While 1
    $case = GuiGetMsg()
    Select
        Case $case = $GUI_EVENT_CLOSE
            Exit
        Case $case = $Button2
                $debut = GuiCtrlRead ($Input1)
                $perso = GuiCtrlRead ($Input5)
                $fin = GuiCtrlRead ($Input2)
                $TAB = GuiCtrlRead ($Input4)
                $depart = GuiCtrlRead ($Input6)
                $temp = GuiCtrlRead ($Input7)
                AdlibEnable("env",60000) ; on lance le script toutes les 60s, dans un mini thread, pour ne pas bloquer la boucle principale
        Case $case = $Button1
            GuiCtrlSetData ($Input1, "http://")
            GuiCtrlSetData ($Input2, "")
            GuiCtrlSetData ($Input4, "0")
            GuiCtrlSetData ($Input5, "")
            GuiCtrlSetData ($Input6, "")
        Case $case = $Button3
            AdlibDisable()
    EndSelect
WEnd

L'avantage est que vous pouvez arreter n'importe quand.

Re: [...] Stopper une boucle !

Posté : mer. 17 déc. 2008 21:38
par joker
nikel tout fonctionne

Re: [...] Stopper une boucle !

Posté : mer. 17 déc. 2008 22:59
par Tlem
Sinon, il serait plus avisé d'utiliser le mode évènementiel.

Re: [R] Stopper une boucle !

Posté : jeu. 18 déc. 2008 10:51
par joker
explique, ou ramene moi sur un tuto avec cette technique ?

Re: [R] Stopper une boucle !

Posté : jeu. 18 déc. 2008 21:57
par Tlem
Il suffit d'utiliser ceci.