Что нового

[Автоматизация] Как реализовать повтор функции в назначенное время.

A

at

Гость
День добрый, Всем! Прошу подсказать, как правильно реализовать автоматическое повторение функции в назначенное время. Например, мне нужен вызов функции в 10 минут каждого часа. В моем примере на секундах я показал, как это реализовано у меня, но очень терзают сомнения потому, что в другом моем скрипте автоматика по этому принципу не работает.

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$_Form_1 = GUICreate("", 468, 165, 261, 78)
$_Group_Download = GUICtrlCreateGroup("Управление скриптом", 8, 8, 449, 145)
$_Checkbox_Automatics = GUICtrlCreateCheckbox("Автоматический режим", 17, 35, 204, 17)
$_Button_1 = GUICtrlCreateButton("Показать сообщение", 313, 115, 131, 25)
$_Input_MIN = GUICtrlCreateInput("00", 248, 51, 25, 21)
$Label1 = GUICtrlCreateLabel("Ручной режим", 336, 96, 76, 17)
$Label2 = GUICtrlCreateLabel("Показывать сообщение  каждую минуту в :", 16, 56, 225, 17)
$Label3 = GUICtrlCreateLabel("секунд", 280, 56, 39, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global $_Automatics = '0' ; Переменная автоматики, по умолчанию пустой чекбокс

While 1
    $nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
; ======================================================================================================================================== РУЧНОЙ РЕЖИМ ===			   
		Case $_Button_1 ; Запуск загрузки в ручном режиме
				_TrayTip_Test_Hands()
					Sleep (1000)
; ========================================================================================================================================= АВТОМАТИКА ===			
	    Case $_Automatics = BitAND(GUICtrlRead($_Checkbox_Automatics), $GUI_CHECKED)  ; Устанавливаем положение Checkbox - Автоматический режим = '1'
		 	If @SEC = Number(GUICtrlRead($_Input_MIN)) Then ; Если секунды текущего времени будут = "$_Input_MIN", то
			    _TrayTip_Test_Automatics()
					Sleep (1000)
					; Например: В 16:00:00 мы выставили секунды = 15, значит автоматика сработает в 16:00:15, далее в 16:01:15 и т.д.)
			EndIf
	EndSwitch
WEnd

 Func _TrayTip_Test_Hands()
		TrayTip('ИНФОРМАЦИЯ','Ручной режим в ' & @HOUR & ':' & @MIN & ':' & @SEC, 0)
EndFunc

 Func _TrayTip_Test_Automatics()
		TrayTip('ИНФОРМАЦИЯ','Автоматический режим в ' & @HOUR & ':' & @MIN & ':' & @SEC, 0)
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,445
at [?]
В моем примере на секундах я показал, как это реализовано у меня
А если так?
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$_Form_1 = GUICreate("", 468, 165, 261, 78)
$_Group_Download = GUICtrlCreateGroup("Управление скриптом", 8, 8, 449, 145)
$_Checkbox_Automatics = GUICtrlCreateCheckbox("Автоматический режим", 17, 35, 204, 17)
$_Button_1 = GUICtrlCreateButton("Показать сообщение", 313, 115, 131, 25)
$_Input_MIN = GUICtrlCreateInput("00", 248, 51, 25, 21)
$Label1 = GUICtrlCreateLabel("Ручной режим", 336, 96, 76, 17)
$Label2 = GUICtrlCreateLabel("Показывать сообщение  каждую минуту в :", 16, 56, 225, 17)
$Label3 = GUICtrlCreateLabel("секунд", 280, 56, 39, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

Global $_Automatics = 0 ; Переменная автоматики, по умолчанию пустой чекбокс

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
; ======================================================================================================================================== РУЧНОЙ РЕЖИМ ===
        Case $_Button_1 ; Запуск загрузки в ручном режиме
                _TrayTip_Test_Hands()
                    Sleep (1000)
; ========================================================================================================================================= АВТОМАТИКА ===
        Case $_Checkbox_Automatics
            $_Automatics = BitAND(GUICtrlRead($_Checkbox_Automatics), $GUI_CHECKED)  ; Устанавливаем положение Checkbox - Автоматический режим = '1'
    EndSwitch
    If $_Automatics And (@SEC = Number(GUICtrlRead($_Input_MIN))) Then ; Если секунды текущего времени будут = "$_Input_MIN", то
        _TrayTip_Test_Automatics()
            Sleep (1000)
            ; Например: В 16:00:00 мы выставили секунды = 15, значит автоматика сработает в 16:00:15, далее в 16:01:15 и т.д.)
    EndIf
WEnd

 Func _TrayTip_Test_Hands()
        TrayTip('ИНФОРМАЦИЯ','Ручной режим в ' & @HOUR & ':' & @MIN & ':' & @SEC, 0)
EndFunc

 Func _TrayTip_Test_Automatics()
        TrayTip('ИНФОРМАЦИЯ','Автоматический режим в ' & @HOUR & ':' & @MIN & ':' & @SEC, 0)
EndFunc
 
Автор
A

at

Гость
Спасибо за подсказку. Изменений к сожалению нет. Может, кто подскажет другое решение.
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,445
at [?]
Изменений к сожалению нет.
Изменений чего? Принципа сравнения текущего времени с ожидаемым? Так другого, вроде, не придумали. Либо вы сами будете сравнивать, либо вам "кто-то" скажет (даст сигнал). Но тот "кто-то" всё равно будет сравнивать текущее время с ожидаемым.
[?]
в другом моем скрипте автоматика по этому принципу не работает
Может всё-таки проблема в скрипте, а не в принципе?
 

ildar

Осваивающий
Сообщения
252
Репутация
30
такой кусок
Код:
While 1
    Select
        Case @MIN=$_Input_MIN ; $_Input_MIN твоя переменная
            Run("Ваша программа.exe", "c:\") ;Запустить программу          
    EndSelect   
    Sleep(......) ; Пауза ..... секунд
WEnd
 
Верх