|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Повторение кода через промежуток времени |
|
|
[решено] Повторение кода через промежуток времени
|
![]() Старожил Сообщения: 379 |
Помогите пожалуйста...
Нужно вот что: 1. Запускаешь скрипт и ставишь время в которое он должен продолжить работу(например 22:05:00), вводишь промежуток времени (например 10 минут) 2. скрипт ждёт когда на часах будет 22 часа 5 минут и по достижению этого времени выполняет пару команд... ![]() 3. после выполнения "пары команд" ждёт заданные 10 минут и выполняет ещё "одну команду"... 4. Впадает в спячку и ровно через ОДИН ЧАС (23 часа 5 минут) снова выполняет "пару команд", ждёт 10 мин, выполняет ещё "одну команду" и так до бесконечности............ Вот примерно так... Лично я сделал это, но мне надо сделать так чтобы переменную (которая отвечает за промежуток времени, тот который 10 минут) можно было менять... а у меня если её поменяешь то скрипт в следущий раз уже не будет ровно в 23 часа 5 минут повторять то что нужно... Может я что то туповато обьяснил, ну если не понятно то спросите, я конкретней обьясню ![]() Спасибо заранее, каждый ваш пост важен для меня!!! |
|
Отправлено: 20:36, 03-05-2009 |
![]() Старожил Сообщения: 215
|
Профиль | Отправить PM | Цитировать До бесконечности? Или есть какое-то условие выхода?
Этот вариант работает, елси твои действия выполняются достаточно быстро. В противном случае делай корректировки или, если невозможно предугадать, сколько времени будут выполняться нужные действия - используй AddLib (это функция, посмотри в справке) в качестве таймера ![]() FirstRunH = 23 $FirstRunM = 05 $TimeNext = 10 * 60 *1000 $TimeHourN = 60 * 60 * 1000 - $TimeNext $FirstSleep = ($FirstRunH - @HOUR) * 60 * 60 *1000 + ($FirstRunM - @MIN) * 60 *1000 Sleep($FirstSleep) While 1 Do DoSom($param) Sleep($TimeNext) DoSom($param) Sleep($TimeHourN) WEnd Func DoSom($Param) ... EndFunc |
------- Отправлено: 22:48, 03-05-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать Вот, только в качестве наводки на путь размышления этот пример. Он не полностью рабочий, ибо нужно еще реализовать форматирование время при сложении (например если сложить @HOUR+1, а @HOUR будет равно 23 часам, то выйдет 24, а нам нужно ведь 00!, если @HOUR будет 01 и мы прибавим @HOUR+1, то выйдет 2, а нужно 02!, тоже и с минутами...) Но может это и сам сможеш сделать...с помощью функции StringFormat и еще чего-то...
#include <GuiConstants.au3> Global $nowtime Global $komanda1=(@HOUR&":"&@MIN-1) ;в переменной будет хранится следующий запуск "первых двух программ" Global $komanda2=(@HOUR&":"&@MIN-1) Global $Intervalkomanda2="10"; в переменной будет хранится интервал, по истечении которого запустится вторая прога. $Gui=GUICreate("Form", 343, 94, 307, 195) GUICtrlCreateLabel(" Текущее время:", 8, 0, 90, 17) $Time_Label=GUICtrlCreateLabel("00:00:00", 104, 0, 50, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0xFF0000) GUICtrlCreateLabel(" Следующий запуск (формат записи 00:00):", 0, 16, 224, 17) $timeDate = GUICtrlCreateLabel("00:00", 232, 16, 46, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x0000FF) $InputVremya_nachala = GUICtrlCreateInput($komanda1, 280, 8, 57, 21) GUICtrlCreateLabel(" Интервал после выполнения первых прог (от 1 до 59):", 0, 40, 282, 17) $Inputinterval=GUICtrlCreateInput("10", 280, 32, 57, 21) $Ok_but = GUICtrlCreateButton("Применить и свернуть в панель задач", 0, 64, 337, 25, 0) GUISetState(@SW_SHOW,$Gui) AdlibEnable("Set_System_Time", 1000) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE AdlibDisable() Exit Case $Ok_but $komanda1=GUICtrlRead($InputVremya_nachala ) ;записываем новое значение следующего запуска "первых двух прог" Guictrlsetdata($timeDate,$komanda1) $Intervalkomanda2=GUICtrlRead($Inputinterval ) ;записываем новое значение интервала GUISetState(@SW_MINIMIZE,$Gui) EndSwitch If $komanda1 == $nowtime Then $komanda1=@Hour+1&":"&@MIN Guictrlsetdata($timeDate,$komanda1) MsgBox(0,"1","Время для первых 2 команд") ;тут запуск "пары команд" $komanda2=@HOUR&":"&@MIN+$Intervalkomanda2 endif if $komanda2==$nowtime Then MsgBox(0,"2","Пришлоо время для выполнения последней команды") ;тут запус остальной команды endif WEnd ; Func Set_System_Time() $nowtime=@HOUR&":"&@MIN Guictrlsetdata($Time_Label, $nowtime&":"&@SEC) EndFunc |
------- Последний раз редактировалось beve, 04-05-2009 в 14:11. Отправлено: 01:35, 04-05-2009 | #3 |
![]() Старожил Сообщения: 379
|
Профиль | Отправить PM | Цитировать Цитата Sylver Dragon:
Цитата beve:
Цитата beve:
|
|||
Отправлено: 14:41, 04-05-2009 | #4 |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать Цитата sashadeg:
|
||
------- Отправлено: 15:12, 04-05-2009 | #5 |
![]() Старожил Сообщения: 379
|
Профиль | Отправить PM | Цитировать А хорошо бы сделать, ещё GUI которое будет показывать, сколько раз программа повторилась, и дату первого запуска...
Я сам сделал через MsgBox но приходиться нажимать на кнопку, чтобы обновить результаты... а это не очень практично... =============================================================================================== P.S. а я вот что использовал для того чтобы программа ждала время для первого запуска вот тут если будешь использовать 00, 01 , 02,... а не 0,1,2,... то программа запустится но никогда не начнётся.... |
------- Отправлено: 15:18, 04-05-2009 | #6 |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать Цитата sashadeg:
#include <GuiConstants.au3> Global $nowtime Global $Time_kom1=(@HOUR&":00") ;в переменной будет хранится следующий запуск "первых двух программ" Global $Time_kom2=(@HOUR&":00") Global $Intervalkomanda2="10"; в переменной будет хранится интервал, по истечении которого запустится вторая прога. Global $Count="0" $Gui=GUICreate("Планировщик", 343, 150, 307, 195) GUICtrlCreateLabel(" Текущее время:", 8, 0, 90, 17) $Time_Label=GUICtrlCreateLabel("00:00:00", 104, 0, 50, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0xFF0000) GUICtrlCreateLabel(" Следующий запуск (формат записи 00:00):", 0, 16, 224, 17) $timeDate = GUICtrlCreateLabel("00:00", 232, 16, 46, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x0000FF) $InputVremya_nachala = GUICtrlCreateInput($Time_kom1, 280, 8, 57, 21) GUICtrlCreateLabel(" Интервал после выполнения первых прог (от 1 до 59):", 0, 40, 282, 17) $Inputinterval=GUICtrlCreateInput("10", 280, 32, 57, 21) GUICtrlCreateLabel(" Счетчик, сколько раз уже был запуск:", 0, 65, 280, 17) $CountLabel = GUICtrlCreateLabel("0", 232, 65, 46, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x0000FF) GUICtrlCreateLabel(" Дата запуска:", 0, 95, 280, 17) GUICtrlCreateLabel(@MDAY&"\"&@MON&"\"&@YEAR, 232, 95, 76, 17) GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif") GUICtrlSetColor(-1, 0x0000FF) $Ok_but = GUICtrlCreateButton("Применить и свернуть в панель задач", 0, 120, 337, 25, 0) GUISetState(@SW_SHOW,$Gui) AdlibEnable("Set_System_Time", 1000) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE AdlibDisable() Exit Case $Ok_but $Time_kom1=GUICtrlRead($InputVremya_nachala ) ;записываем новое значение следующего запуска "первых двух прог" Guictrlsetdata($timeDate,$Time_kom1) ;запись следующего запуска $Intervalkomanda2=GUICtrlRead($Inputinterval ) ;записываем новое значение интервала GUISetState(@SW_MINIMIZE,$Gui) EndSwitch If $Time_kom1 == $nowtime Then Guictrlsetdata($CountLabel,$Count+1); пишем в счетчик запусков $Hour=@Hour+1 Switch $Hour Case "24" $Hour="00" case 1 To 9 $Hour="0"&$Hour endswitch $Time_kom1=$Hour&":"&@MIN Guictrlsetdata($timeDate,$Time_kom1) ;запись следующего запуска MsgBox(0,"1","Время для первых 2 команд") ;тут запуск "пары команд" $Min=@MIN+$Intervalkomanda2 $Hour=@HOUR if $Min>60 then $Min=$Min-60 $Hour=@HOUR+1 Switch $Hour Case "24" $Hour="00" case 1 To 9 $Hour="0"&$Hour endswitch endif if $Min>0 and $Min<10 then $Min="0"&$Min $Time_kom2=$Hour&":"&$Min Guictrlsetdata($Inputinterval,$Time_kom2) ;только для того чтобы убедится что запуск "проги 2" будет в нужное время (а так ненужно) endif if $Time_kom2==$nowtime Then MsgBox(0,"2","Пришлоо время для выполнения последней команды") ;тут запус остальной команды $Time_kom2="11111111" ;это нужно для того, чтобы если "прога2" будет выполнятся меньше 1 минуты, то небыло ее повторного запуска endif WEnd ; Func Set_System_Time() $nowtime=@HOUR&":"&@MIN Guictrlsetdata($Time_Label, $nowtime&":"&@SEC) EndFunc |
|
------- Последний раз редактировалось beve, 04-05-2009 в 18:14. Отправлено: 16:23, 04-05-2009 | #7 |
![]() Старожил Сообщения: 379
|
Профиль | Отправить PM | Цитировать Смотри, вот мой пример:
#include <Date.au3> $sTime = InputBox("время запуска Часы:Минуты","") $sek = InputBox("","Время выжидания для следующего повторения СЕКУНДЫ") _ScheduleStart_Proc($sTime & ":00") Func _ScheduleStart_Proc($sStartTime) While 1 If _NowTime() = $sStartTime Then Return 1 Sleep(100) WEnd EndFunc $i = 0 While 1 MsgBox(1,"Пример :)","Уже повторов:"& $i,3) Sleep($sek*1000) $i=$i+1 WEnd ;$i - это число выполненых раз P.S. Если честно, то я мало понимаю, что ты тут написал ^^ |
------- Последний раз редактировалось sashadeg, 04-05-2009 в 19:46. Отправлено: 19:31, 04-05-2009 | #8 |
Старожил Сообщения: 307
|
Профиль | Отправить PM | Цитировать Цитата sashadeg:
Добавлено: Я пытался сделать, как проще..., Лучше спроси по конкретной функции, которую не понимаэш...Если конечно, не про все... Можно упростить скрипт, поубирав лишние метки (labels)... |
|
------- Последний раз редактировалось beve, 04-05-2009 в 20:16. Отправлено: 20:04, 04-05-2009 | #9 |
![]() Старожил Сообщения: 379
|
Профиль | Отправить PM | Цитировать сДелал, всё как ты написал... Дурья моя бошка... Не робит нифига... помоги, пожалуйста с конкретным моим примером(сделать GuI окно статуса работы скрипта: сколько раз прошел цикл + время и дата первого запуска(буду Очень Сильно тебе благодарен)... просто я пользуюсь щас этим скриптом (правда с погрешностями небольшими идет время)
|
------- Отправлено: 21:22, 04-05-2009 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] скрипт для нажатия клавиши F2 через опр. промежуток времени | Bushbasher | AutoIt | 2 | 13-01-2010 12:53 | |
[решено] Запуск определенной программы через n времени??? | Anarasius | AutoIt | 14 | 20-09-2009 01:31 | |
Помогите отключить интернет на короткий промежуток времени! | minutka15 | AutoIt | 6 | 07-09-2009 10:52 | |
Требуется настроить выполнение sh скрипта на unix через определеный промежуток времен | backgam | Программирование в *nix | 8 | 05-05-2009 18:15 | |
[решено] Запуск программы через случайные интервалы времени | hitomi | AutoIt | 2 | 04-04-2009 19:04 |
|