Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Программирование на Lua _ Закрыть все таймеры

Автор: 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