Что нового

Досрочный выход из цикла

Атос

Новичок
Сообщения
85
Репутация
0
Привет.

Подскажите, а как я могу досрочно выйти из цикла?

Т.е., выход из скрипта ( или завершение работы цикла) на любой итерации цикла, по нажатию кнопки "Stop".


Код:
$hgui = GUICreate("111", 500, 300, -1, -1)
Local $s1 = GUICtrlCreateButton('Start', 100, 10, 50, 22, 0x0)
Local $s2 = GUICtrlCreateButton('Stop', 100, 50, 50, 22, 0x0)

GUISetState()

While 1
Switch GUIGetMsg()
Case -3
Exit
Case $s1
For $i = 1 To 5
MsgBox(0, '222', '333', 1)
Sleep(3000)
Next
Case $s2
Exit
EndSwitch
Wend
 

Prog

Продвинутый
Сообщения
537
Репутация
65
http://autoit-script.ru/autoit3_docs/keywords/ExitLoop.htm
 
Автор
А

Атос

Новичок
Сообщения
85
Репутация
0
Prog, пока цикл не дойдёт до конца, у меня не получается, ни Exit, ни ExitLoop.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
$hgui = GUICreate("111", 500, 300, -1, -1)
Local $s1 = GUICtrlCreateButton('Start', 100, 10, 50, 22, 0x0)
Local $s2 = GUICtrlCreateButton('Stop', 100, 50, 50, 22, 0x0)

GUISetState()

While 1
  Switch GUIGetMsg()
    Case -3
      Exit
    Case $s1
      For $i = 1 To 5
        MsgBox(0, '222', '333', 1)
        $t = TimerInit()
        While TimerDiff($t) < 3000
          If GUIGetMsg() = $s2 Then Exit
        WEnd
      Next
    Case $s2
      Exit
  EndSwitch
WEnd
 
Автор
А

Атос

Новичок
Сообщения
85
Репутация
0
InnI, а как можно сделать более универсальное решение?
Дело в том, что там не MsgBox, а абсолютно разные и непредсказуемые команды.
Много долгих Sleep.
Как можно сделать такую кнопку, при нажатии на корторую, будет немедленно выход из цикла, или из скрипта?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
$hgui = GUICreate("111", 500, 300, -1, -1)
Local $s1 = GUICtrlCreateButton('Start', 100, 10, 50, 22, 0x0)
Local $s2 = GUICtrlCreateButton('Stop', 100, 50, 50, 22, 0x0)
GUISetState()

GUIRegisterMsg(0x0111, 'WM_COMMAND')

While 1
  Switch GUIGetMsg()
    Case -3
      Exit
    Case $s1
      For $i = 1 To 5
        MsgBox(0, '222', '333', 1)
        Sleep(3000)
      Next
    Case $s2
      Exit
  EndSwitch
WEnd

Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
  If BitAND($wParam, 0xFFFF) = $s2 Then Exit
  Return 'GUI_RUNDEFMSG'
EndFunc
 
Верх