Что нового

Завершение циклической функции условием или по времени.

McSkull

Знающий
Сообщения
66
Репутация
6
Мне нужно сделать выполнение определенных If-ов до того момента пока не получится определенный результат либо пройдет 20 минут...
Как это реализовать?


Вот то, что приходит в голову но не знаю как написать, что при прошествии 20 минут выполнить действие... :(
Код:
Func Test()
$var = 0
$var2 = 0
Do
if .......... then ; выполняются действия
...................
if test2() = 1 Then
$var2 = 1
EndIf
Select
    Case $var2 = 1 ; в результате $var2 стало = 1
        $var = 1
    Case не знаю, что написать ; прошло 20 минут
        $var = 1
EndSelect 
Until $var = 1
EndFunc

Func test2()
    If ....... Then 
        Return 1 
    Else
        Return 0 
    EndIf
EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
$Timer = TimerInit()
While TimerDiff($Timer) <= 1200000 ; 20 min
	If ... Then
		ExitLoop
	EndIf
	If ... Then
		ExitLoop
	EndIf
	If ... Then
		ExitLoop
	EndIf
WEnd
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
2 Yashied спасибо.
Но этоне совсем то, что мне нужно...

Так функция закончится через 20 минут но мне нужно, что-бы она заканчивалась и когда из test2() возвращается значение 1...
Если за 20 минут из test2() не было Return 1 то цикл нужно завершить...

Прошу прощения...
Не знал про.
Код:
ExitLoop
:smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
$Timer = TimerInit()
While 1
	...
	...
	...
	...
	If  test2() = 1 And TimerDiff($Timer) > $TimeLimit Then ExitLoop
WEnd
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Этой теме было бы полезно существовать в разделе AutoIt для новичков, или я ошибаюсь?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ошибаешься, тут мы рассматриваем базовые способы организации работы ИИ. Максимум можно ее туда продублировать
26.gif
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
OffTopic:
Любой код где есть операторы условия можно считать миниатюрными ИИ ;D
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Belfigor [?]
тут мы рассматриваем базовые способы организации работы ИИ
Это шутка? :blink:

Максимум можно ее туда продублировать
Ничего дублировать не нужно (это правилами запрещено)...

Суть данного вопроса касается многих аспектов, поэтому теперь я на 100% убеждён что теме самое место в «AutoIt для новичков» ;D.

Переношу...
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
CreatoR сказал(а):
Суть данного вопроса касается многих аспектов, поэтому теперь я на 100% убеждён что теме самое место в «AutoIt для новичков» ;D.

Переношу...
Я сразу и хотел её здесь создать но так как этот вопрос меня интересовал именно в контексте EvE-Online создал там...
И помоему не ошибся, так как господин Belfigor видимо понял как я собираюсь это использовать и предложил очень интересный вариант. :IL_AutoIt_1:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
McSkull [?]
И помоему не ошибся, так как господин Belfigor видимо понял как я собираюсь это использовать и предложил очень интересный вариант.
OffTopic:
Без обид в чей-либо адрес, но вариант предложенный Belfigorом применим при любом случае в контексте поставленной задачи. Хочешь чтобы скрипт работал 20 мин и вырубился? тот скрипт подойдет. не важно где и как использовать :whistle: А Eve-не Eve уже не важно. Это наверное самая стандартная реализация без указания каких-либо особенностей.



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

а вот содержательная часть.
либо в коде предложенным Belfigorом затаилась ошибка не удовлетворяющая условию поставленной задачи, либо в условии неточность, а скрипт правильный. поясняю:
McSkull [?]
Так функция закончится через 20 минут но мне нужно, что-бы она заканчивалась и когда из test2() возвращается значение 1...Если за 20 минут из test2() не было Return 1 то цикл нужно завершить...
судя по этой цитате надо чтобы цикл завершился не только по истечению 20 мин но и досрочно, если тестовая функция вернет 1. а так получается, что даже если функция вернула единицу а времени прошло меньше 20 мин, скрипт продолжит работать. если условие верное, то надо тут
Код:
If  test2() = 1 And TimerDiff($Timer) > $TimeLimit Then ExitLoop

поставить OR вместо And
 
Автор
M

McSkull

Знающий
Сообщения
66
Репутация
6
Kaster сказал(а):
Поставить OR вместо And
Совершенно верно...

Думаю Belfigor сознательно допустил ошибку.

Дело ведь в том, что я никогда ничего не писал. Начал лишь 2 недели назад и то, что давно является всем известной и стандартной реализацией для меня настоящее озарение... :smile:

P.S.
Спасибо всем кто помогает здесь начинающим. :IL_AutoIt_1:
 

asa12

Новичок
Сообщения
66
Репутация
3
К сожалению это касается всего кода Белфогора, если там всё просто и можно "ошибится" это будет написано. Хотя, если идут сложные вещи - на удивление работает.
 
Верх