XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Про функциональность таймеров
Простой короткий вопрос, проверить сейчас, к сожалению, не могу.
Если я запускаю один и тот же таймер 100тыщ раз подряд с разным таймаутом и разными функциями, то все они сработают?
Старый 05.12.2013, 03:51
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
нет
Старый 05.12.2013, 04:57
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Hate, весьма оперативно, спасибо!
А что будет и как всё-всё в доте упихивается в один таймер?
(я доселе каждой функции свой заводил, потом удаляя)
Старый 05.12.2013, 05:22
Buulichkaa
Делаю спеллы за еду
offline
Опыт: 20,146
Активность:
Clamp, таймер, запущенный на опреледенную ф-ию будет обрабатывать лишь эту ф-ию.
Старый 05.12.2013, 06:20
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Buulichkaa, спасибо, но это уже сказали выше. Вопрос был переформулирован в "как реализовать корректную работу всех функций, используя один таймер".
Старый 05.12.2013, 06:23
Buulichkaa
Делаю спеллы за еду
offline
Опыт: 20,146
Активность:
Clamp, делать по циклу на структуру, т. е по циклу на наш спелл и в цикле обрабатывать все активные объекты.
Старый 05.12.2013, 06:28
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Ясно, идиотизм и геморрой =/
Ну их нахер тогда, обойдусь такой конструкцией, так как целью было просто удобный юз сделать:
lib EasyTimer
{
    private void KillTimer()
    {
        DestroyTimer(LoadTimerHandle(Hash, GetHandleId(GetExpiredTimer()), 0))
        DestroyTimer(GetExpiredTimer())
    }

    void TimerGo(real Time, code Func, bool Periodic)
    {
        timer   KillerTimer
        timer   ActionTimer = CreateTimer()
        TimerStart(ActionTimer, Time, Periodic, Func)
        if(!Periodic)
        {
            KillerTimer = CreateTimer()
            SaveTimerHandle(Hash, GetHandleId(KillerTimer), 0, ActionTimer)
            TimerStart(KillerTimer, Time + .01, false, function KillTimer)
        }
        ActionTimer = null
        KillerTimer = null
    }
}
Старый 05.12.2013, 06:46
Buulichkaa
Делаю спеллы за еду
offline
Опыт: 20,146
Активность:
Clamp, можно было бы представить сами структуры через БД в основной структуре обрабатываемой циклом и обращаться к функциям обработки через БД строк и ExecutFunc()
А вообще это все не принципиально, что один таймер, что много, на самом деле разницы нет, во всяком случае в наше время.
Buulichkaa добавил:
По таймеру на ф-ию вполне можно жить
Старый 05.12.2013, 07:15
Bashmak

offline
Опыт: 377
Активность:
Коль тема о таймерах, задам вопрос здесь же. На днях заметил, что ежели запаузить многократный таймер, то отпаузится он некорректно. Как это можно исправить? По новой их создавать?
Старый 05.12.2013, 09:09
Buulichkaa
Делаю спеллы за еду
offline
Опыт: 20,146
Активность:
ExSinner, что значит многократный таймер? Таймер который обрабатывает много действий в периодике? Все нормально паузится. PauseTimer(some_timer)
Старый 05.12.2013, 09:43
ScorpioT1000
Работаем
offline
Опыт: отключен
можно ещё обойтись установкой ide для актуального движка, а не игры 15-летней давности
я не знаю ни одной программы, где было бы больше костылей, чем в доте для вц3...
Старый 05.12.2013, 11:51
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
ScorpioT1000, я работаю 9/5 в актуальном движке, хочется же повспоминать старое)
Старый 05.12.2013, 12:21
ScorpioT1000
Работаем
offline
Опыт: отключен
тогда посмотри как в tcx сделано, там есть коммент MAIN LOOP
Старый 05.12.2013, 12:23
DioD

offline
Опыт: 45,134
Активность:
запускается один таймер который тикает 20 раз в секунду
каждую секунду внутри таймера считается массив колбеков и они исполняются
те колбеки которые должны ждать больше тика исполняются каждый Х тик или наоборот не исполняются каждый Х тик
как показала практика перезапускать таймер чтобы подобрать более менее подходящий период и поджидать нужные тики.
привязка идёт через Condition(function X) и triggercondition, когда надо убираем когда не надо добавляем, кондишины статик и перманент.
Старый 05.12.2013, 13:56
ScorpioT1000
Работаем
offline
Опыт: отключен
это гарантированно медленней регистрации отдельных таймеров, если что. они специально для этого были придуманы, чтобы не делать свой пулл на говноязыке
Старый 05.12.2013, 14:08
DioD

offline
Опыт: 45,134
Активность:
но гарантированно быстрее чем постоянный перезапус одного таймера
читай что автор спрашивает штоле?
Старый 05.12.2013, 15:29
ScorpioT1000
Работаем
offline
Опыт: отключен
ему уже ответили во втором посте, что не сработает. даже тысяча повиснет к хукам.
Старый 05.12.2013, 15:32
adic3x

offline
Опыт: 108,439
Активность:
это гарантированно медленней регистрации отдельных таймеров, если что. они специально для этого были придуманы, чтобы не делать свой пулл на говноязыке
По моему скромному мнению - быстрее. Я даже когда-то тесты проводил. Я, когда делал спел "напалм" - там была возможность сильных задержек - проверял. С точки зрения именно быстродействия - идеальный вариант - циклы по всем типам классов в одной функции. Даже пустой цикл будет быстрее вызова callback функции из родной функции обработки таймера. Впрочем, с другой стороны помните о лимите операции и думайте в первую очередь о стабильности, переносимости и читаемости кода.
Старый 05.12.2013, 15:53
ScorpioT1000
Работаем
offline
Опыт: отключен
Даже пустой цикл будет быстрее вызова callback функции из родной функции обработки таймера
а вызов юзерфункции в цикле?) или ты предлагаешь вместо функций писать дифайны везде или всё в одну запихать? это офк красотаб будет
Старый 05.12.2013, 16:00
Bashmak

offline
Опыт: 377
Активность:
Buulichkaa, пардон, неправильно выразился. Таймер цикличный, то бишь при истечении он снова будет отсчитывать указанное время.
Старый 05.12.2013, 17:12
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 04:38.