Page 1 sur 1

[R] Arreter une boucle contenant un sleep

Posté : mar. 12 août 2008 00:42
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
 

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

Posté : mar. 12 août 2008 01:17
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 !

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

Posté : dim. 17 août 2008 22:25
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