| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Sleep(DWORD) - разная задержка на разных компах |
| Автор: mastaflow 2.5.2008, 13:47 | ||
| Проблема такая: пишу змейку - точнее уже написал и работает, но есть некоторый глюк или еще что, который я не могу объяснить Часть игры выглядит так:
Соответственно все работает нормально, НО! На некоторых компах, при запуске исполняемого файла, задержка в данной части кода эквивалентна Sleep(10), т.е. змейка двигается со скоростью в 10 раз меньшей - вот почему так происходит - я не понимаю. При этом в одной части кода Sleep(1000) - работает нормально. Писал в MS Visual Studio 2008 под вистой. Тестил на домашнем компе с ХР - работает медленно, тестил на компах друзей - работает нормально, тестил в универе - работает медленно. В чем может быть подвох? если что, что скачать змейку можно http://vti160.ucoz.ru/files/Snake_1.1.rar |
| Автор: JackYF 2.5.2008, 14:18 |
| Во-первых, это надо было не общий раздел, а в раздел по WinAPI. Во-вторых, если мне помнится, задержку в 1 мс тебе ОС не гарантирует, минимум в районе 6-10 мс. |
| Автор: JackYF 2.5.2008, 15:09 | ||
Думаю, что да. |
| Автор: mastaflow 2.5.2008, 15:25 |
| спасибо за помощь |
| Автор: mes 2.5.2008, 19:42 | ||
или не ориентироваться на задержку (использовать в расчетах коэфициент на прошедшее время) |
| Автор: mastaflow 3.5.2008, 00:15 | ||||||||
| В общем я прошел такой путь решения проблемы: воспользовался функцией GetSystemTimeAdjustment и получил, что системное время обновляется с частотой 15.625 мс, и соответственно задержка в Sleep становится фактичестки кратной данному значению (в среднем). Предпринял следующее:
функция timeBeginPeriod устанавливает интервал обновления таймера. Тестировал на 4х компах с разными процами на ХР, и на двух с Вистой, при этом под управлением ХР вне зависимости от процессора результаты одинаковые, на висте - разнятся:
При этом под ХР результаты не прыгали, в отличие от Висты, но у Висты среднее время ближе к реальности. Тестирование проводилось при помощи вставки
Далее получаем количество замеряем количество тиков в секунду и в общем получаем, данные которые выше. Так же тупо поставил, чтобы змейка крутилась на месте при Sleep и сравнивал с системным временем: При Sleep(10) - на ХР время в игре отстает примерно на 3-5 секунд в минуту, на Висте - на 0-1. В итоге что я сделал в программе
и не стал заморачиваться ибо завтра надо сдавать курсовую. |