Page 1 sur 1

[R] Comment fermer un script qui tourne en boucle.

Posté : dim. 26 juil. 2015 17:55
par Boulanza
Bonjour,
J'ai une GUI avec deux boutons le premier pour lancer le scripte (Go), le deuxième bouton me permet de quitter le scripte.
Mon problème : Impossible d’arrêter mon scripte qui tourne en boucle (While 1/WEnd) avec le bouton « Quitter » dans lequel j’ai mis la fonction Exit. J’ai beau chercher par moi-même, mais je ne trouve pas la solution. Alors Comment sortir de la boucle et fermer le script.
Merci pour votre aide…
Cordialement.

Re: [..] Comment sortir de la boucle et fermer le script.

Posté : dim. 26 juil. 2015 18:04
par mikell
Ben et le code ? où l'est le code ? Image

Re: [..] Comment fermer un script qui tourne en boucle.

Posté : dim. 26 juil. 2015 18:27
par Boulanza
Re-Bonjour,
J'ai pas le code en main.
J'ai changé le titre (Comment fermer un script qui tourne en boucle.) de ma demande pour qu'elle soit une solution générale à tous script qui tourne en boucle.
Cordialement.

Re: [..] Comment fermer un script qui tourne en boucle.

Posté : dim. 26 juil. 2015 18:45
par TiDi
Salut,

Voici une solution :

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$GUI = GUICreate("GUI", 200, 100, 200, 130)
$Bouton1 = GUICtrlCreateButton("Go", 5, 5, 190, 25)
$Bouton2 = GUICtrlCreateButton("Fermer", 5, 35, 190, 25)
GUISetState(@SW_SHOW)

While 1
   $msg = GUIGetMsg()
   Switch $msg
      Case $Bouton1
         ; Ton script
      Case $Bouton2
         Exit
   EndSwitch
WEnd
J'ai vérifié, ça marche très bien ;)

Re: [..] Comment fermer un script qui tourne en boucle.

Posté : dim. 26 juil. 2015 19:01
par orax
La question est un peu vague mais j'imagine que la boucle While bloque le script. Si c'est le cas, il y a cette page sur le wiki : Interrupting a running function qui à l'air d'être en rapport avec ta demande.

Re: [..] Comment fermer un script qui tourne en boucle.

Posté : dim. 26 juil. 2015 19:19
par Boulanza
Merci TiDi,
Mon script ressemble à votre exemple, mais le boutant Exit est inactif lorsque le script tourne en boucle infini.

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$GUI = GUICreate("GUI", 200, 100, 200, 130)
$Bouton1 = GUICtrlCreateButton("Go", 5, 5, 190, 25)
$Bouton2 = GUICtrlCreateButton("Fermer", 5, 35, 190, 25)
GUISetState(@SW_SHOW)

While 1
   $msg = GUIGetMsg()
   Switch $msg
      
Case $Bouton1
        [color=#0000FF]Mon script qui tourne en boucle infini.[/color]
     
Case $Bouton2
         [color=#0000FF]Exit est inactif lorsque le script tourne en boucle infini.[/color]

   EndSwitch
WEnd

Re: [..] Comment fermer un script qui tourne en boucle.

Posté : dim. 26 juil. 2015 20:36
par ZDS
Boujour Boulanza,

Ce que tu peux faire, c'est un garde fou :
► Afficher le texteCode avec fonction d'arrêt
Et si tu souhaites conserver la possibilité de couper le programme avec un bouton et pas qu'avec un raccourci, il faut traiter son appui hors de la boucle While-WEnd :
► Afficher le texteCode avec fonction d'arrêt
Attention, pour que la fonction command(...) sache à quel bouton elle a à faire, il faut que la variable de ton bouton $Bouton2 soit en global.

A bientôt !

PS: Il n'en reste pas moins que c'est une méthode qui est loin d'être propre. Ce qu'il faudrait c'est prévoir dans le code qui boucle une fonction d'arrêt, et pour cela il faudrait comme l'a demandé mikell que tu nous postes le code qui boucle. Autant boucher une fuite plutôt que d'écoper.

Re: [..] Comment fermer un script qui tourne en boucle.

Posté : dim. 26 juil. 2015 20:45
par Boulanza
Merci infiniment ZDS pour la solution garde fou... c'est très clair comme explication.
Actuellement j'utilise la fonction:
; Touche echap pour quitter le script en cours.
HotKeySet("{ESC}", "Fin")
; Fonction de sortie du script.
Func Fin()
Exit
EndFunc

Mais je cherche une solution en cliquant sur le bouton "Quitter" pour arrêter l'application (script).
Cordialement.

Re: [..] Comment fermer un script qui tourne en boucle.

Posté : dim. 26 juil. 2015 23:58
par ZDS
ZDS a écrit :Et si tu souhaites conserver la possibilité de couper le programme avec un bouton et pas qu'avec un raccourci [...]
Le second code est exactement ce que tu veux, tu n'as pas dû lire tout mon message.

Mais je me répète, couper le script en plein milieu de son exécution est une méthode à proscrire.
Envoie-nous le code qui boucle pour qu'on puisse t'aider à le terminer proprement.

Re: [..] Comment fermer un script qui tourne en boucle.

Posté : lun. 27 juil. 2015 01:28
par mikell
Ce qui n'est pas clair : qu'est-ce qui peut empêcher le bouton 'Quitter' de faire son boulot ?
Par exemple, si le bouton1

Code : Tout sélectionner

Case $Bouton1
        Mon script qui tourne en boucle infini.
commande une fonction qui "tourne en boucle infinie" et que cette fonction contient elle-même une boucle While, à part une hotkey les seuls moyens qui marchent sont le mode événementiel ou le GuiRegisterMsg, comme l'ont déjà évoqué ZDS dans son message ou orax qui fournit le lien qui va bien dans ce post
Il est donc nécessaire de savoir exactement ce que commande le bouton1, autrement il est impossible de répondre à la question posée, auquel cas ce sujet n'a aucun intérêt donc il sera fermé (logique)
Le but de ce forum est d'aider les utilisateurs à résoudre un problème précis, pas de recopier toutes les solutions possibles mentionnées dans le fichier d'aide sur une question générique beaucoup trop vague
Non mais :evil:

Re: [..] Comment fermer un script qui tourne en boucle.

Posté : lun. 27 juil. 2015 11:20
par Boulanza
Bonjour tout le mande,
Oui Messieurs, vous avez raison, la solution 2 de ZDS est parfaite et universelle pour forcer la fermeture d'une application qui tourne en boucle infini.
je vous remercie pour votre aimable aide.
Cordialement.