monitor1_timer, monitor2_timer и т.д они все структурой отличаются друг от друга? если нет то можно все под один шаблон сделать ведь.
Структура разная, в каждой созданной метке от индекса есть динамическая переменная, которая присваивает свое значение.
Вот пример реализации задачи, но почему-то в этом варианте второй заданный таймер начинает отсчет на исполнение после первого таймера.
#SingleInstance Force
#NoEnv
ListLines Off
#Persistent
Loop_Index := 0
Loop 2
{
Loop_Index++
x%Loop_Index% := 1
}
Return
1::
Global oTimers := [], Start := A_TickCount
;SetTimer("other_timer", "второй", 4000)
; SetTime :=
SetTimer("monitor_timer", Loop_Index, x%Loop_Index% * 2000)
SetTimer("monitor_timer", "четвёртый", 5000)
;SetTimer("monitor_timer", "третий", 4000)
Return
monitor_timer:
; ToolTip % (A_TickCount - Start)//1000 "`n`n" A_ThisLabel
MsgBox,, Label, % oTimers[oTimers.MinIndex()].Value "`n`n" (A_TickCount - Start)/1000 " sec`n`n" A_ThisLabel
Return
SetTimer(Label, Value, Time) {
SetTimer, GoLabel, Off
Set := Time
While oTimers.HasKey(Set)
Set++
oTimers[Set] := {Label:Label,Value:Value}
SetTime := oTimers.MinIndex()
; SetTime := SetTime < 1 ? 1 : SetTime
SetTimer, GoLabel, % "-" SetTime
Return
GoLabel:
Try GoSub, % oTimers[oTimers.MinIndex()].Label
oTimers.Delete(oTimers.MinIndex())
If !oTimers.MinIndex()
Return
SetTime := oTimers.MinIndex()
; SetTime := SetTime < 1 ? 1 : SetTime
SetTimer, GoLabel, % "-" SetTime
Return
}
То, что подразумевается под "динамической" переменной:
Сама "динамическая" метка от этого такая:
monitor_timer:
index := oTimers[oTimers.MinIndex()].Value
var%index% := "unlock"
Return
Если было бы можно сделать так:
SetTimer, monitor_timer%Loop_Index%, 1000
monitor_timer%Loop_Index%:
То было бы куда проще, но так, к сожалению, нельзя.
Все, что остается здесь дорешать:
1. Как одновременно задавать таймеры, чтобы второй запускался одновременно с первым, а не начинал свой отсчет после исполнения первого.
2. И чтобы второй таймер не прерывал первый, пока тот не закончит свое исполнение в заданном Label