Что нового

[Автоматизация] Бесконечный цикл и функции

ulan44

Знающий
Сообщения
55
Репутация
8
Версия AutoIt: 3.5.4

Описание: Доброго времени камрады.
Имеем, бесконечный цикл и несколько функций

Код:
While 1
Какой то код
   _time1()
Какой то код
   _time2()
Какой то код
   _time3()
WEnd

Func _time1()
    $Result1 = Что-то выполняется
    Sleep(60000)
 Return $Result1
EndFunc

Func _time2()
    $Result2 = Что-то выполняется
    Sleep(10000)
 Return $Result2
EndFunc

Func _time3()
    $Result3 = Что-то выполняется
    Sleep(300000)
 Return $Result3
EndFunc

Выглядит это так.
Запускается цикл,
выполняет
Код:
_time1()
ждет 60 секунд, далее
выполняет
Код:
_time2()
ждет 10 секунд, далее
выполняет
Код:
_time3()
ждет 300 секунд, далее
все сначала.

А хотелось бы получить следующее:
Запускается цикл, одновременно выполняются функции
Код:
_time1()
_time2()
_time3()

По истечению некоторого времени
Код:
Sleep(некоторое время функций _time1() _time2() _time3())

Они выполнялись бы дальше т.е
если функция
Код:
_time1() имеет Sleep(60000)
должна выполняться каждые 60сек
если функция
Код:
_time2() имеет Sleep(10000)
должна выполняться каждые 10сек
если функция
Код:
_time3() имеет Sleep(300000)
должна выполняться каждые 300сек
И так далее по бесконечности.

Возможно ли так реализовать? Если да то как ? Если нет то почему и как лучше это сделать ?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
ulan44
Лучше опиши что пытаешься добиться в результате (цель этого алгоритма), т.к возможно и не нужны все эти вызовы функции.

P.S
В AutoIt нельзя запустить несколько функции одновременно, код выполняется поочерёдно.
 

Prog

Продвинутый
Сообщения
537
Репутация
65
Для одновременного выполнения функций, нужно каждую из них запускать в параллельном потоке. Но AutoIt не поддерживает многопоточность. Точнее можно запустить функцию в потоке, но с большой долей вероятности программу закроет винда из-за ошибки.
 
Автор
U

ulan44

Знающий
Сообщения
55
Репутация
8
CreatoR сказал(а):
ulan44
Лучше опиши что пытаешься добиться в результате (цель этого алгоритма), т.к возможно и не нужны все эти вызовы функции.

P.S
В AutoIt нельзя запустить несколько функции одновременно, код выполняется поочерёдно.

Я хочу получить следующее, утилитка висит в процессах и через не которое время допустим каждые 60 секунд делает скриншот экрана с момента как пользователь зашел в систему и до окончания работы.
Одна функция следить за временем и допустим с 17.30 до 17.40 упаковывает все скрины в архив и отправляет на ftp сервер.
Вторая функция следит что с 12.00 до 18.00 часов нельзя запускать не которые программы типа Chome, IE,Mozzilla и прочее.
Возможно дальше функционал будет расширяться.
ActiveDirectory нет и не предвидится, а локальные политики лень настраивать на каждом компе =)
 

Prog

Продвинутый
Сообщения
537
Репутация
65
Для этого достаточно одной функции вызываемой по таймеру. Все проверки можно производить в ней.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
ulan44 [?]
Я хочу получить следующее
Как то так:

Код:
AdlibRegister('_Events_Handler', 60 * 1000)

While 1
	Sleep(10)
WEnd

Func _Events_Handler()
	;screenshot...
	
	_Pack_Send()
	_Kill_Apps()
EndFunc

Func _Pack_Send()
	If @HOUR = 17 And @MIN >= 30 And @MIN <= 40 Then
		;pack & send...
	EndIf
EndFunc

Func _Kill_Apps()
	If @HOUR >= 12 And @HOUR < 18 Then
		;kill
	EndIf
EndFunc
 
Верх