Показать сообщение отдельно
Старый 23.12.2010, 14:12   #21
Ambal
MaNGOS Dev
 
Аватар для Ambal
 
Регистрация: 22.06.2010
Сообщений: 78
Сказал(а) спасибо: 24
Поблагодарили 71 раз(а) в 25 сообщениях
Ambal Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от rsa Посмотреть сообщение
При наличии отдельного потока для времени решать проблемы с квантованием более не придется - для этого оно и предназначено.
Проблема с отдельным потоком в том, что классическая схема

Код:
while(_running)
{
time_t tmStart = getMSTime();
Sleep(1);
uint32 tick = getMSTime() - tmStart;
}
в любом случае предполагает что квант времени будет равен значению системного таймера, который "пляшет" на разных ОСях в самых разных диапазонах. Для примера, ОС Windows имеет стандартный таймер на 15 мсек (т.е. Sleep(1) на самом деле является Sleep(15)). Даже если мы будет использовать мьютексы аля WaitForSingleObject(handle, 1), поток все равно "проспит" количество времени равное разрешению системного таймера. Таким образом ТОЧНОЕ время вы все равно не получите, а будете ограничены алгоритмом работы потока-счетчика и результатом, который он успел насчитать во время последней активности.

Возникает логичный вопрос: если мы в любом случае будем иметь фиксированное значение системного времени в интервале неактивности потока таймера, то как будет клиент реагировать на такие timestamps? Если клиент преспокойно проживет получая одно и тоже время в пределах одного тика, то имеет прямой смысл (на первых порах) "точный таймер" реализовать в контексте основного потока - изменять его значение перед каждым вызовом World::Update().

Последний раз редактировалось Ambal; 23.12.2010 в 14:17.
Ambal вне форума