|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Досрочный выход из цикла |
|
|
[решено] Досрочный выход из цикла
|
Новый участник Сообщения: 37 |
Профиль | Отправить PM | Цитировать Привет.
Подскажите, а как я могу досрочно выйти из цикла? Т.е., выход из скрипта ( или завершение работы цикла) на любой итерации цикла, по нажатию кнопки "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 |
|
Отправлено: 10:43, 27-07-2017 |
Новый участник Сообщения: 38
|
Профиль | Отправить PM | Цитировать |
Отправлено: 10:58, 27-07-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 37
|
Профиль | Отправить PM | Цитировать Mike909, пока цикл не дойдёт до конца, у меня не получается, ни Exit ни ExitLoop.
|
Отправлено: 11:30, 27-07-2017 | #3 |
Новый участник Сообщения: 38
|
Профиль | Отправить PM | Цитировать |
Отправлено: 18:14, 27-07-2017 | #4 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Нужен таймер:
$hgui = GUICreate("111", 500, 300, -1, -1) $s1 = GUICtrlCreateButton('Start', 100, 10, 50, 22, 0x0) $s2 = GUICtrlCreateButton('Stop', 100, 50, 50, 22, 0x0) GUISetState() While 1 Switch GUIGetMsg() Case -3, $s2 Exit Case $s1 For $i = 1 To 5 MsgBox(0, '222', '333', 1) $iTimer = TimerInit() While TimerDiff($iTimer) < 3000 Switch GUIGetMsg() Case -3, $s2 Exit EndSwitch WEnd Next EndSwitch WEnd |
|
------- Отправлено: 18:26, 27-07-2017 | #5 |
Новый участник Сообщения: 37
|
Профиль | Отправить PM | Цитировать Creat0R, а как можно сделать более универсальное решение?
Дело в том, что там не MsgBox, а абсолютно разные и непредсказуемые команды. Много долгих Sleep. Как можно сделать такую кнопку, при нажатии на корторую, будет немедленно выход из цикла, или из скрипта? |
Отправлено: 10:21, 28-07-2017 | #6 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Атос:
#include <GUIConstantsEx.au3> Global $hGUI, $iStart_Bttn, $iStop_Bttn Global $iStop_Flag = False $hGUI = GUICreate("111", 500, 300) $iStart_Bttn = GUICtrlCreateButton('Start', 100, 10, 50, 22, 0x0) $iStop_Bttn = GUICtrlCreateButton('Stop', 100, 50, 50, 22, 0x0) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $iStart_Bttn _Start() Case $iStop_Bttn _Stop() EndSwitch WEnd Func _Start() GUICtrlSetState($iStart_Bttn, $GUI_DISABLE) GUICtrlSetState($iStop_Bttn, $GUI_ENABLE) For $i = 1 To 5 MsgBox(0, '222', '333', 1) _Sleep(3000) ;MsgBox(0, '444', '555', 1) ;_Sleep(5000) ;MsgBox(0, '666', '777', 1) ;_Sleep(8000) ;SHOULD BE AT THE END If $iStop_Flag Then ExitLoop EndIf Next _Stop() EndFunc Func _Stop() $iStop_Flag = False GUICtrlSetState($iStart_Bttn, $GUI_ENABLE) GUICtrlSetState($iStop_Bttn, $GUI_DISABLE) EndFunc Func _Sleep($iTime) If $iStop_Flag Then Return EndIf Local $iTimer = TimerInit() While TimerDiff($iTimer) < $iTime Switch GUIGetMsg() Case $iStop_Bttn $iStop_Flag = True ExitLoop Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd EndFunc Тут нужно либо повесить всё выполнение кнопки на внешний скрипт, либо постоянно проверять событие нажатия кнопки выхода/завершения, как я это сделал выше в примерах. |
|
------- Отправлено: 16:35, 28-07-2017 | #7 |
Новый участник Сообщения: 38
|
Профиль | Отправить PM | Цитировать Вот получился рабочий код, с добавлением таймера и своей обработки событий :
#include <GUIConstantsEx.au3> Opt("GUIOnEventMode", 1) $hgui = GUICreate("111", 500, 300, -1, -1) Local $s1 = GUICtrlCreateButton('Start', 100, 10, 50, 22, 0x0) GUICtrlSetOnEvent(-1, 'Start') Local $s2 = GUICtrlCreateButton('Stop', 100, 50, 50, 22, 0x0) GUICtrlSetOnEvent(-1, 'Stop') GUISetOnEvent($GUI_EVENT_CLOSE, 'Stop') GUISetState() While 1 Sleep(10) WEnd ; Func Stop() Exit EndFunc ; Func Start() GUICtrlSetState($s1,$GUI_DISABLE) AdlibRegister("Timer1", 10) EndFunc Func Timer1() For $i = 1 To 5 MsgBox(0, '222', '333', 1) Sleep(3000) Next GUICtrlSetState($s1,$GUI_ENABLE) AdlibUnRegister("Timer1") EndFunc |
Последний раз редактировалось Mike909, 29-07-2017 в 12:59. Отправлено: 09:57, 29-07-2017 | #8 |
Новый участник Сообщения: 37
|
Профиль | Отправить PM | Цитировать Creat0R, Mike909, спасибо.
|
Отправлено: 12:07, 29-07-2017 | #9 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Mike909,
Когда в вашем примере произойдёт событие Timer1(), и начнётся цикл For, скрипт остановит своё выполнение пока не закончится Sleep(3000). Exit сработает, но не оставновка цикла в событий. |
------- Отправлено: 20:07, 31-07-2017 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Может ли материнка выйти из строя из-за... | nikhop | Материнские платы и память | 1 | 17-09-2016 11:23 | |
Интерфейс - экранная лупа | Khch | Microsoft Windows 7 | 3 | 14-10-2013 13:49 | |
как выйти из запоя | P.M. | Флейм | 182 | 10-02-2013 03:51 | |
MSFT SQL Server - Помогите выйти из ' SUSPECT ' | morozov_s_v | Программирование и базы данных | 3 | 11-03-2010 01:12 | |
как выйти в Интернет из WMVare | egik | Сетевые технологии | 3 | 07-01-2007 23:06 |
|