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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Boulanza
Niveau 10
Niveau 10
Messages : 711
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#1

Message 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.
Modifié en dernier par Boulanza le lun. 27 juil. 2015 11:17, modifié 2 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#2

Message par mikell »

Ben et le code ? où l'est le code ? Image
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 10
Niveau 10
Messages : 711
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#3

Message 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.
TiDi
Niveau 2
Niveau 2
Messages : 27
Enregistré le : sam. 06 juin 2015 23:27
Status : Hors ligne

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

#4

Message 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 ;)
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

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

#5

Message 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.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Boulanza
Niveau 10
Niveau 10
Messages : 711
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#6

Message 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
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

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

#7

Message 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.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Boulanza
Niveau 10
Niveau 10
Messages : 711
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#8

Message 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.
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

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

#9

Message 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.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

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

#10

Message 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:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Boulanza
Niveau 10
Niveau 10
Messages : 711
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

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

#11

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