Что нового

прерывание скрипта и возврат к его началу

stormovik

Новичок
Сообщения
58
Репутация
1
Код:
adlibregister ("func_1", 5000)

Func func_1()
                  
          PixelSearch (1,2,3,4,0x123456)
          If Not @error Then ...

Endfunc

;======== тело скрипта ==========

 предстартовые команды  и объявление переменных

While 1
          основные команды и циклы
          основные команды и циклы
          основные команды и циклы
Wend



Имеется такой скрипт. Каждые пять секунд требуется проверять выполнение определенного условия и, если оно выполняется, полностью перезапустить скрипт. Выход из него предусмотрен только Exitloop'ом. Не могу понять, как осуществить выход из него, точнее из вложенных в него циклов, так как весьма неудобно вкладывать такую проверку в каждый цикл.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
stormovik
Код:
adlibregister ("func_1", 5000)
$GoHome = False

Func func_1()
                  
          PixelSearch (1,2,3,4,0x123456)
          If Not @error Then $GoHome = True

Endfunc

;======== тело скрипта ==========

While 1
          команды, циклы, переменные
          команды, циклы, переменные
          If $GoHome Then ContinueLoop
          команды, циклы, переменные
Wend



Добавлено:
Сообщение автоматически объединено:

А из вложенных циклов нужно добавлять уровень
Код:
While 1
          команды, циклы, переменные
            While 1
              If $GoHome Then ContinueLoop 2
            WEnd
          команды, циклы, переменные
          If $GoHome Then ContinueLoop
          команды, циклы, переменные
Wend
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
stormovik
Создай два скрипта. В первом проверка на выход из бесконечного цикла второго.
 
Автор
S

stormovik

Новичок
Сообщения
58
Репутация
1
А из вложенных циклов нужно добавлять уровень
Просто таких мелких циклов проверок, ожиданий довольно много. Кроме того, команда на прерывание может поступить в любой момент, то есть выполнение всех дальнейших команд в последовательности просто будет бессмысленным, а то и вовсе невозможным.

Автор: Z_Lenar
stormovik
Создай два скрипта. В первом проверка на выход из бесконечного цикла второго.
А разве script editor умеет выполнять одновременно два скрипта?
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
Нет но можно выполнять каждую часть по отдельности. Так например в одном скрипте:
Код:
If UBound($CmdLine) > 1 Then ; Если количество параметров больше 1-го выполняется дочерний скрипт
    ; Выполняется дочерний процесс
    ; Вызываем главный скрипт
    Main()
    Exit ; Это обязательно для дочернего скрипта
EndIf

; Иначе мы первые
Global $hChild ; Дескриптор дочернего процесса
Global $iTimer ; Время начала выполнения

HotKeySet("{PAUSE}", "ForceExitFunc") ; Кнопка паузы принудительно закрывает основной+дочерний скрипт

$iTimer = TimerInit()

; Проверка на выполнение скомпилированного exe-шника
If Not @Compiled Then
	$hChild = Run(@AutoItExe & ' /AutoIt3ExecuteScript "' & @ScriptFullPath & '" 123') ; Запускаем себя с одним параметром
Else
	$hChild = Run(@ScriptFullPath & ' 123')
EndIf

While TimerDiff($iTimer) < 10000  ; 10 секунд ждем
    Sleep(1000)
Wend

ProcessClose($hChild) ; Убиваем дочерний скрипт

Func Main()
	Local $iCount = 0
    While 1
        TrayTip('Child', $iCount, 1)
        $iCount = $iCount + 1
        Sleep(1000)
    WEnd
EndFunc

Func ForceExitFunc()
	ProcessClose($hChild) ; Убиваем дочерний скрипт
	Exit ; Завершаем программу
EndFunc


Закомментируй первый If и отлаживай основную часть иначе проверочную.
Немного изменил скрипт для наглядности.
 
Верх