Jump to content

Problem with Sleep and Exit Loop


Recommended Posts

Im getting a problem exiting from a loop with a SLEEP in it.

I click on CANCEL to ExitLoop, but it doesnt work. If i keep clicking on it, sometimes it work.

If i reduce sleep time, or delete it, it works fine. But, how higher the sleep is, more difficulte is to exit loop.

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

Local $loop = 0

$BreakLoop = GUICreate("Break Loop", 218, 101, 193, 125)
$Status = GUICtrlCreateLabel("Loop : ", 24, 10, 75, 25, 0)
$GO = GUICtrlCreateButton("GO", 24, 48, 65, 25, 0)
$Cancel = GUICtrlCreateButton("Cancel", 104, 48, 75, 25, 0)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $GO
            loop()
    EndSwitch
WEnd

Func loop()
While 1
    GUICtrlSetData($Status, "Loop in Progress: " & $loop)
    $nMsg = GUIGetMsg()

    If $nMsg = $Cancel Then
        $Abort = MsgBox(36, "Cancel?", "Are you sure you want to cancel?")
        If $Abort = 6 Then
            ExitLoop
            Return
        EndIf
    Else
        Sleep(500)
        $loop = $loop + 1
        Sleep(500)
    EndIf

WEnd
EndFunc ;loop

Does anybody know what is happening?

Link to comment
Share on other sites

Your GUI is sleeping just like you told it to. It's kind of hard for it to do anything while it's sleeping, that's why it's unresponsive.

Ok. But i need this time before run the loop again.

How can i do a loop and wait a feel seconds before run the commands again and cancel it any time?

Edited by ihackbr
Link to comment
Share on other sites

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

Local $loop = 0

$BreakLoop = GUICreate("Break Loop", 218, 101, 193, 125)
$Status = GUICtrlCreateLabel("Loop : ", 24, 10, 75, 25, 0)
$GO = GUICtrlCreateButton("GO", 24, 48, 65, 25, 0)
$Cancel = GUICtrlCreateButton("Cancel", 104, 48, 75, 25, 0)
GUISetState(@SW_SHOW)

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $GO
            loop()
    EndSwitch
WEnd

Func loop()
    While 1
        GUICtrlSetData($Status, "Loop in Progress: " & $loop)
        $TD = TimerInit()
        While TimerDiff($TD) <= 1000
            $nMsg = GUIGetMsg()
            If $nMsg = $Cancel Then
                If MsgBox(36, "Cancel?", "Are you sure you want to cancel?") = 6 Then
                    Return
                EndIf
            EndIf
        WEnd
        $loop += 1
    WEnd
EndFunc   ;==>loop

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...