Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2013, 17:18   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию таймер

Здравствуйте.

Как можно осуществить независимый учет милисекунд? Например, в игре есть анимация, при большой нагрузке (включенный ФРАПС для записи видео), все начинает замедляться, анимация играет тоже медленно, в то время как в других играх, все по прежнему быстро работает, разве что кадров мало. К тому же я заметил, что команда Sleep на разных компах работает по разному.

Подскажите, как сделать учет милисекунд, при этом не нагружать проц?

Сейчас у меня программа работает со 100 кадрами, т.е. между основным циклом задержка 10 мсек - Sleep(10); только вот на самом деле это не всегда 10 мсек..
Артэс вне форума Ответить с цитированием
Старый 23.10.2013, 06:45   #2
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Цитата:
Подскажите, как сделать учет милисекунд, при этом не нагружать проц?
Функциями WinAPI GetTickCount/GetTickCount64 или timeGetTime библиотеки winmm(mmsystem.h).
Код:
static DWORD start = GetTickCount(); //  или timeGetTime
const DWORD delay = 50uL;

DWORD cur = GetTickCount();  // или timeGetTime
if((cur - start) > delay) {
      start = cur;
      // здесь обновление update frame.
      UpdateFrame();
}
Этот случай больше для 2D, где смена кадров спрайтов, а в 3D рассчитываешь delta и интерполирование...
Nuklon вне форума Ответить с цитированием
Старый 23.10.2013, 14:09   #3
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Благодарю, уже узнал про timeGetTime(); из исходников Квэйка 3 Крутая функция.
Артэс вне форума Ответить с цитированием
Старый 23.10.2013, 15:47   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от Артэс Посмотреть сообщение
Сейчас у меня программа работает со 100 кадрами
Работать с частотой выше частоты опреснения экрана смысла нет. Вместо таймера лучше привязываться к v-sync
waleri вне форума Ответить с цитированием
Старый 23.10.2013, 17:22   #5
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Хм, тут реализовал учет циклов на основе этих мили-секунд, на нотбуке, при Sleep(10), получается в среднем 85 циклов.. а на настольном компе прога выдает 60 циклов.. визуально этого хватает, но где гарантии что на другом компе не будет еще меньше циклов.. а Sleep 1 и 10 не дают разницы в данном случае... как можно добиться 100 кадров, при этом не нагружая процессор полностью (эффект Sleep)? Или может есть способ повлиять на работу Sleep? Вопрос чисто ради интереса, хоть и 60 вполне хватает.
Артэс вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер Prizrak86 C# (си шарп) 3 31.01.2012 18:43
таймер Tema_666 Общие вопросы Delphi 6 03.03.2011 09:20
Таймер(C#) Bella Помощь студентам 0 23.03.2010 19:17
Таймер на С++ Александр Елис Помощь студентам 3 26.01.2010 16:30
Таймер Sergeo_89 Общие вопросы Delphi 11 24.01.2010 16:38