$clo = 0
$iSyn = 0
$hGui = GUICreate('My Program', 250, 260)
$iStatusBar = GUICtrlCreateLabel($clo, 19, 10, 150, 55)
GUICtrlSetFont(-1, 18)
GUISetState()
AdlibRegister('_Call00', (60 - @SEC) * 1000) ; Синхронизвция при старте
_Call00() ; вызов каждую минуту
Do
Until GUIGetMsg() = -3
Func _Call00()
If Not @SEC Then
Switch @SEC
Case 1 To 30
AdlibRegister('_Call00', (60 - @SEC) * 1000) ; Синхронизвция при расинхронизации
$iSyn = -1
Case 31 To 59
AdlibRegister('_Call00', (120 - @SEC) * 1000) ; Синхронизвция при расинхронизации
$iSyn = 1
Case Else
If $iSyn Then
AdlibRegister('_Call00', 60 * 1000) ; В обычный режим
$iSyn = 0
EndIf
EndSwitch
EndIf
$clo += 1
GUICtrlSetData($iStatusBar, $clo)
EndFunc
$clock = 0
$iSyn = 1
$hGui = GUICreate('Раз в секунду', 210, 95)
GUISetFont(10)
GUISetBkColor(0xc0b075)
GUICtrlCreateLabel(' Секунд = ' & @LF & ' Триггер синхр = ' & @LF & ' AdlibRegister = ' & @LF & ' Offset = ', 10, 10, 130, 70)
GUICtrlSetBkColor(-1, 0xfdffae)
$iStatistics = GUICtrlCreateLabel('', 140, 10, 60, 70)
GUICtrlSetBkColor(-1, 0xf8ed83)
GUISetState()
$pause = 1000 - @MSEC
AdlibRegister('_Call00', $pause) ; Синхронизвция при старте
GUICtrlSetData($iStatistics, $clock & @LF & $iSyn & @LF & $pause)
Do
Until GUIGetMsg() = -3
Func _Call00()
Switch @MSEC
; Case 100 To 500 ; Допуск рассинхронизации 100
Case 20 To 500 ; Допуск рассинхронизации 20
AdlibRegister('_Call00', 1000 - @MSEC) ; Синхронизвция при расинхронизации
$iSyn = -1
$pause = 1000 - @MSEC
; Case 501 To 800 ; Допуск рассинхронизации 100
Case 501 To 980 ; Допуск рассинхронизации 20
AdlibRegister('_Call00', 2000 - @MSEC) ; Синхронизвция при расинхронизации
$iSyn = 1
$pause = 2000 - @MSEC
Case Else
If $iSyn Then
AdlibRegister('_Call00', 1000) ; В обычный режим
$iSyn = 0
EndIf
$pause = 1000
EndSwitch
$clock += 1
; If Not $iSyn Then $pause = 1000 ; это только для статистики "AdlibRegister = "
GUICtrlSetData($iStatistics, $clock & @LF & $iSyn & @LF & $pause & @LF & @MSEC)
EndFunc ;==>_Call00
#include <StaticConstants.au3>
$clock = 0
$iSyn = 1 ; 1 чтобы при первом вызове функции установить 60000, если отклонения нет.
$hGui = GUICreate('Раз в минуту', 210, 105)
GUISetFont(10)
GUISetBkColor(0xc0b075)
GUICtrlCreateLabel(' Таймер секунд = ', 10, 10, 130, 25, $SS_LEFTNOWORDWRAP)
GUICtrlSetBkColor(-1, 0xfdffae)
$iTimer = GUICtrlCreateLabel('', 140, 10, 60, 25)
GUICtrlSetBkColor(-1, 0xf8ed83)
GUICtrlCreateLabel(' Минут = ' & @LF & ' Триггер синхр = ' & @LF & ' AdlibRegister = ', 10, 35, 130, 60)
GUICtrlSetBkColor(-1, 0xfdffae)
$iStatistics = GUICtrlCreateLabel('', 140, 35, 60, 60)
GUICtrlSetBkColor(-1, 0xf8ed83)
GUISetState()
$msec = (60 - Number(@SEC & '.' & @MSEC)) * 1000
; Exit MsgBox(0, 'Сообщение', $msec & @LF & Number(@SEC & '.' & @MSEC))
AdlibRegister('_Call00', $msec) ; Синхронизвция при старте
GUICtrlSetData($iStatistics, $clock & @LF & $iSyn & @LF & $msec)
$s = 0
$sec = 0
$tmp = 0
Do
$s += 1
If $s = 20 Then ; Проверка каждые 20 * 10 = 200 миллисекунд
$s = 0
$sec = @SEC
If $tmp <> $sec Then
GUICtrlSetData($iTimer, $sec) ; здесь таймер чтобы следить за переключением времени
$tmp = $sec
EndIf
EndIf
Until GUIGetMsg() = -3
Func _Call00()
$msec = Number(@SEC & '.' & @MSEC)
Switch $msec
Case 0.1 To 30 ; Допуск рассинхронизации 100
$msec = (60 - $msec) * 1000
AdlibRegister('_Call00', $msec) ; Синхронизвция при расинхронизации
$iSyn = -1
Case 30 To 59.9 ; Допуск рассинхронизации 100
$msec = (120 - $msec) * 1000
AdlibRegister('_Call00', $msec) ; Синхронизвция при расинхронизации
$iSyn = 1
Case Else
If $iSyn Then
$msec = 60000 ; 60 * 1000
AdlibRegister('_Call00', $msec) ; В обычный режим
$iSyn = 0
EndIf
EndSwitch
$clock += 1
If Not $iSyn Then $msec = 60000 ; это только для статистики "AdlibRegister = "
GUICtrlSetData($iStatistics, $clock & @LF & $iSyn & @LF & $msec)
EndFunc ;==>_Call00
HotKeySet('{Esc}', '_Exit')
If Int(@SEC) And Int(@MSEC) Then
AdlibRegister('_00_sec', (60 - @SEC) * 1000 - @MSEC)
Else
Call('_MyFunc_00_sec', @MSEC)
AdlibRegister('_00_sec', 60000)
EndIf
While 1
Sleep(500)
WEnd
Func _00_sec()
If Not Int(@SEC) Then Call('_MyFunc_00_sec', @MSEC)
AdlibRegister('_00_sec', (60 - @SEC) * 1000 - @MSEC)
EndFunc ;==>_00_sec
Func _MyFunc_00_sec($s_Msec)
Local $s_NowTime = StringFormat('%02d:%02d:%02d\t%03d msec\r\n', @HOUR, @MIN, @SEC, $s_Msec)
DllCall('user32.dll', 'bool', 'MessageBeep', 'uint', 0)
ConsoleWrite($s_NowTime)
FileWrite(@ScriptDir & '\timer.txt', $s_NowTime)
EndFunc ;==>_MyFunc_00_sec
Func _Exit()
Exit
EndFunc ;==>_Exit
А почему вы проверяете на строгое равенство, а не на "больше или равно"? Ведь в случае ">=" условие тоже сработает сразу после закрытия MsgBoxведь @HOUR&@MIN уже не будет равно 1043
Я думаю так же, как и одного: сравнить текущее время с заданным значением. И так для всех. А дальше по обстоятельствам. Судя по вашим комментариям, вам главное не пропустить время. Т.е. если оно даже прошло, то всё равно выполнить задачу. Вот я и предложил ">=".как организовать проверку пяти времен?
Local $pause
$now = 2301 ;Текущее время
If $now>='0000' Then
$pause = 0
EndIf
If $now>='2300' Then
$pause = 23
EndIf
If $now>='0250' Then
$pause = 200
EndIf
ConsoleWrite( $pause& @LF)
Если сравнивать через полночь, то тут уже дату нужно прикручивать. Иначе сложно понять - время прошло или ещё не наступило.Как сравнивать со знаком ">="