Проблема с GetTickCount()

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Проблема с GetTickCount()

Сообщение Tarantul » 14.12.2004 (Вт) 16:41

Я создавал игру, ну и для котрололя fps использовал API функцию GetTickCount, которая, на сколько я понимаю возвращает количество милисекунд от запуска Windows и должна работать очень точно. Однако, провев следующий опыт, я получил:


Код: Выделить всё
Sub Main()
Dim Start As Long

Start = GetTickCount

While GetTickCount - Start = 0
Wend

MsgBox GetTickCount - Start
'Должно быть 1, а у меня 15 !!!

End Sub


Когда разница между временем старта и текущего перестает быть 0, она должна быть 1, а у меня почему - то 15.

Так в чем - же дело:

В процесоре, винде, или вообще функция так и должна работать :?:

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 14.12.2004 (Вт) 16:47

Вообще так и должно быть...

Для более точного отсчёта промежутков времени надо использовать мультимедийный таймер (см. API-Guide), а GetTickCount в принципе возвращает неточные данные...

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

И еще...

Сообщение Tarantul » 14.12.2004 (Вт) 17:11

Кстати, забыл сказать что Sleep у меня работает нормально

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 14.12.2004 (Вт) 17:14

Это вполне нормально, смею заверить :D

Тем более, что точность (нормальность работы) Sleep оценивается также, по-видимому, несколько субъективно...

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 14.12.2004 (Вт) 18:09

Юзай timeGetTime, как уже писали, или для еще большой точности QueryPerfomance, что то такое, точно не помню.
الفيجوال بيسك الرابح

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 15.12.2004 (Ср) 0:00

Спасибо, кажись timeGetTime в этом тесте работает как надо. :)
Думаю, что и в игре будет работать нормально.

Tarantul
Бывалый
Бывалый
 
Сообщения: 235
Зарегистрирован: 13.12.2004 (Пн) 16:39
Откуда: IUnknown

Сообщение Tarantul » 15.12.2004 (Ср) 18:27

Чето мне кажется у меня все равно комп глючит. :( А вообще может быть такое, что погано работает системный таймер? Я просто заметил притормаживания не только в своей игре, а и в других, как Need For Speed.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 15.12.2004 (Ср) 18:35

учти, что винды - это система НЕ реального времени.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20

    TopList  
cron