Автор: dimajak 31.1.2011, 21:07
Во время работы скрипта добавляются таймеры, при срабатывании какого-то таймера он удаляется, но возникает ситуация когда нужно прервать и удалить все работающие в это время таймеры.
Есть ли такая возможность?
Автор: Ksan 31.1.2011, 21:22
Добавь команды удаления таймеров по их индексам (когда ты их открывал, наверно, пишешь их индексы, вот оттуда и бери).
К примеру, отработал таймер tmr5 - удалил после себя все другие таймеры.
А при отработке таймеров tmr1-4 не будет таких строк (как пример говорю)
Вот пример:
Код
function OnTimer(tmr)
if tmr == tmr5 then
bFlag5 = false
Core.SendToOps(sMsg5)
TmrMan.RemoveTimer(tmr1)
TmrMan.RemoveTimer(tmr2)
TmrMan.RemoveTimer(tmr3)
TmrMan.RemoveTimer(tmr4)
TmrMan.RemoveTimer(tmr5)
elseif tmr == tmr2 then
bFlag2 = false
Core.SendToOps(sMsg2)
TmrMan.RemoveTimer(tmr2)
end
end
Во втором случае в функции удаляется только таймер tmr2
(остальные варианты я не стал добавлять в код, так как для примера они уже лишни)
Автор: Nickolya 31.1.2011, 21:58
Можно, допустим, сделать свою обвязку на стандартные функции
вот что выходит у меня в наброске:
Код
TmrMan.AddTimerOld = TmrMan.AddTimer
TmrMan.RemoveTimerOld = TmrMan.RemoveTimer
TmrMan.tTimers = {}
function TmrMan.RemoveTimer(id)
if id then
if TmrMan.tTimers[id] then
TmrMan.RemoveTimerOld(id)
TmrMan.tTimers[id] = nil
end
else
for i in pairs(TmrMan.tTimers) do
TmrMan.RemoveTimerOld(i)
end
TmrMan.tTimers = {}
end
end
function TmrMan.AddTimer(tmr, s)
local s, id = s or false, 0
if s then
id = TmrMan.AddTimerOld(tmr, s)
else
id = TmrMan.AddTimerOld(tmr)
end
TmrMan.tTimers[id] = tmr
return id
end
Вызов
TmrMan.RemoveTimer() без айди удалит все таймеры.
Автор: dimajak 1.2.2011, 0:52
причина оказалась в другом - http://mydc.ru/topic4632.html