Почему в движке таймеры/задержки работают на тике, а не сами

по себе? Логика такая, что каждый тик проверяется, прошло ли какое-то время, вместо того чтобы проверить один раз по истечении этого времени. Для чего это было сделано?

7 ответов

15 просмотров

а как проверять по истечении этого времени?

Потому что игровая логика в одном потоке и обработка тиков идёт в тот же фрейм что и обработка событий таймеров и делеев

Дмитрий-Сергеев Автор вопроса
Vladimir Shirshov
Потому что игровая логика в одном потоке и обработ...

Это понятно, но почему сделано именно так? Таймеры/делеи могут просто поставить Sleep на какое-то время и после продолжить работу. Если требуется не блокировать поток, то можно саму задержку поставить на другом потоке, а для синхронизации использовать мьютексы. Намного более быстрый вариант, чем просто каждый тик проверять таймер

Дмитрий Сергеев
Это понятно, но почему сделано именно так? Таймеры...

хм, ты предлагаешь на каждый таймер создавать поток со своим Sleep, просто что-бы потом дернуть делегат?)

Дмитрий Сергеев
Это понятно, но почему сделано именно так? Таймеры...

Это так не работает так как мьютексы это весьма недешево, иначе lockless бы не городили. Обычно делают один планировщик, который вычисляет когда следующий таймер и спит до этого момента, а потом вызывает все делегаты стопкой и считает когда следующий раз просыпаться

Дмитрий-Сергеев Автор вопроса
Vladimir Baranov
Это так не работает так как мьютексы это весьма не...

Ну или так, но в движке все на тике стоит. Есть аналог планировщика, но он так же устроен так, что нужно тикать каждый кадр

Похожие вопросы

Обсуждают сегодня

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта