Что нового

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

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 702
Код:
$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 552
Репутация
930
Код:
$Timer = TimerInit()
While 1
	...
	...
	...
	...
	If  test2() = 1 And TimerDiff($Timer) > $TimeLimit Then ExitLoop
WEnd
 
Автор
M

McSkull

Новичок
Сообщения
66
Репутация
6
Сенкс за помощь... :beer:
 

CreatoR

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

Belfigor

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

kaster

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

CreatoR

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

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

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

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

McSkull

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

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

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
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
К сожалению это касается всего кода Белфогора, если там всё просто и можно "ошибится" это будет написано. Хотя, если идут сложные вещи - на удивление работает.
 
Верх