Добавлен KalaKoltes
Недавно узнал, что у "TriggerSleepAction" есть минимальное кол-во времени, решил сделать что-то похожее при помощи таймера, т.к. везде только про него и пишут. Внутри "PolledWait" использовался TimerGetRemaining(), но у меня не получилось его реализовать, т.к. значение даже при истечении таймера у TimerGetRemaining() выходит всегда одно, условие для выхода из цикла не выполняется. Не мог бы кто подсказать, что я делаю не так.
function Trig_TESTWAIT_Actions takes nothing returns nothing
local real i = 1
local timer t
set t = CreateTimer()
call TimerStart(t, 1, false, null)
loop
exitwhen i <= 0
set i = TimerGetRemaining(t)
endloop
call RemoveUnit(gg_unit_Hpal_0000)
call DestroyTimer(t)
set t = null
set real i = 0
endfunction
local real i = 1
local timer t
set t = CreateTimer()
call TimerStart(t, 1, false, null)
loop
exitwhen i <= 0
set i = TimerGetRemaining(t)
endloop
call RemoveUnit(gg_unit_Hpal_0000)
call DestroyTimer(t)
set t = null
set real i = 0
endfunction
Принятый ответ
KalaKoltes, обычная функция TriggerSleepAction работает в циклах. Здесь изобретение велосипеда не нужно, но когда нужно выполнить какое действие через промежуток времени без обрывания потока, то тут понадобятся ухищрения с таймером и передача аргументов в функцию таймера через хэш-таблицу, структуру, TimerExploit или глобалки.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Не знал, что цикл может зависать. Пытался с его помощью "отсрочить" выполнение остатка функции, пока остаток таймера не станет равен нулю.
для первого есть вейт и он прекрасно справляется
для второго юзают таймеры
в твоём случае именно 2 вариант