[R] Arreter une boucle contenant un sleep

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
helloword
Niveau 1
Niveau 1
Messages : 1
Enregistré le : mar. 12 août 2008 00:10
Status : Hors ligne

[R] Arreter une boucle contenant un sleep

#1

Message par helloword »

Bonjour,
J'ai un problème dont je n'arrive pas à trouver la solution ni à contourner le blocage.
J'ai fait un programme simple qui permet de rafraichir une fenêtre toutes les 5 secondes.
Ce programme doit tourner en boucle jusqu'à ce que j'appuie sur un bouton stop.
Or je n'arrive pas à capter l'événement stop une fois que la boucle est lancée. Je pense que c'est dû à la fonction sleep qui bloque la lecture des évènements.
J'aurai besoin d'aide pour contourner ce problème et pouvoir arrêter la boucle lorsque l'on appuie sur le bouton stop.
Merci d'avance pour vos idées

Voici le programme:

Code : Tout sélectionner

$AutoRefresh = GUICreate("Refresh", 140, 50, -1, -1, -1)
$Button_START = GUICtrlCreateButton("Start", 10, 10, 50, 30)
$Button_STOP = GUICtrlCreateButton("Stop", 80, 10, 50, 30)

GUISetState()

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $Button_START
            Start_Refresh()
        Case $msg = $Button_STOP
            exit 
    EndSelect
WEnd

Func Start_Refresh()
    while GUIGetMsg()<> $Button_STOP
        Send("{F5}")
        Sleep(5000)
    wend
EndFunc
 
big_ben3333
Niveau 1
Niveau 1
Messages : 8
Enregistré le : lun. 10 sept. 2007 18:32
Localisation : GOLBEY
Status : Hors ligne

Re: [..] Arreter une boucle contenant un sleep

#2

Message par big_ben3333 »

Salut, moi j'avais fait cela avec une variable.

Genre au moment du clic sur stoppe tu affecte une valeur à une variable et ensuite tu teste cette valeur et tu fait un "ExitLoop" qui sort de ta boucle si elle existe.

Bien à toi !
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Arreter une boucle contenant un sleep

#3

Message par sylvanie »

Bonsoir,
Pour des tâches répétitives à intervalle régulier, il vaut mieux utiliser "adlibenable" prévue pour ce genre de situation :

Code : Tout sélectionner

$AutoRefresh = GUICreate("Refresh", 140, 50, -1, -1, -1)
$Button_START = GUICtrlCreateButton("Start", 10, 10, 50, 30)
$Button_STOP = GUICtrlCreateButton("Stop", 80, 10, 50, 30)

GUISetState()

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $Button_START
            AdlibEnable("Start_Refresh",5000)
        Case $msg = $Button_STOP
            exit 
    EndSelect
    Sleep(100)
WEnd

Func Start_Refresh()
        Send("{F5}")
EndFunc
 
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Répondre