Что нового

как прервать функцию и перейти на ее начало?

stormovik

Новичок
Сообщения
58
Репутация
1
Имеется функция, выполняющая некую операцию.
В ходе выполнения функции поступает определенный сигнал, который останавливает ее выполнение и запускает другую функцию.
После этого исходную нужно запустить заново.
Идеальным было бы получить что-то вроде Go To, что бы фунция выглядела так:
i
i<---------------i
i i
i i
i i
if ... then ... ->^
i
i
v
Или, на худой конец, как пропустить выполнение всех команд бесконечного цикла, выполняемых после получения сигнала:
While 1 <-----<-i
i i
i i
i i
if ... then ... i
i v ^
i i i
i i i
i<-----< i
WEnd ---------->^
ExitLoop не годится, так как полностью выходит из цикла
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
stormovik [?]
пропустить выполнение всех команд бесконечного цикла, выполняемых после получения сигнала
Код:
ContinueLoop()

если я правильно понял...
 
Автор
S

stormovik

Новичок
Сообщения
58
Репутация
1
а есть ли возможность реализовать первый вариант?
 

Black_Hole

Знающий
Сообщения
126
Репутация
11
в цикле написать условие еще одно отличное от первого =)
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
stormovik [?]
В ходе выполнения функции поступает определенный сигнал, который останавливает ее выполнение и запускает другую функцию.После этого исходную нужно запустить заново.
Код:
HotKeySet("{f1}", "signal")
HotKeySet("{esc}", "quit")

Global $Signal = False

F1()

Func F1()
  Do
    ConsoleWrite("1" & @CRLF)
    Sleep(500)
    If $Signal Then ; <= по сигналу
      F2()          ; <= вызов функции и ожидание её завершения
      ContinueLoop  ; <= начать заново (пропустить всё до Until)
    EndIf
    ConsoleWrite("2" & @CRLF)
    Sleep(500)
  Until 0
EndFunc

Func F2()
  ConsoleWrite("3" & @CRLF)
  Sleep(500)
  ; $Signal = Not $Signal
EndFunc

Func signal()
  $Signal = Not $Signal
EndFunc

Func quit()
  Exit
EndFunc
 

Astel064

Помог мой пост, ставь +!
Сообщения
276
Репутация
51
Код:
   i
   i<---------------i
   i                       i
   i                       i
   i                       i
    if ... then ... ->^
   i
   i
   v

Код:
While 1
If F1() <> 1 Then ExitLoop
Wend

Func F1()
....
...
...
If ... Then Return 1; В этом случае функция начнется заново
If ... Then Return 0; В этом случае функция будет завершена
...
...
...
...
EndFunc


Если я правильно понял, то можно сделать так...
 
Верх