Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

Использование функции GetTickCount для создания задержки в 8 мсе   Найти похожие ветки 

 
Игорь Степанов   (2006-01-24 20:18) [0]

Уважаемые мастера,

Я использую функцию API GetTickCount для задержки длительностью 8 мсек в следующем коде:

Var Time1,time2:Dword;

Time1:=GetTickCount;
repeat
  Time2:=GetTickCount;
until (time2-time1)>=8;

Однако цикл срабатываетпри разности в 15 или 16 вместо 8 тиков.

В чём тут дело?

С уважением,

Игорь Степанов


 
Rouse_ ©   (2006-01-24 21:23) [1]

Такой точности ты не добьешся. Мультимедийные таймеры тебе нужны.
timeSetEvent и т.п.


 
Desdechado ©   (2006-01-24 22:27) [2]

тик<>мс
лучшее, чего мне удавалось добиваться таймерами - 12 мс

но для варианта загруженной многими задачами системы тебе ничего не поможет...


 
Игорь Степанов   (2006-01-25 09:45) [3]

Спасибо.

1. Можно ли использовать функции типа QueryPerformanceFrequency и QueryPerformanceCounter?

2. Где находятся мультимедийные таймеры?

3. Каким способом можно добиться точности задержки в 0.1 мсек?

С уважением,

Игорь Степанов


 
Digitman ©   (2006-01-25 09:55) [4]


> Игорь Степанов   (25.01.06 09:45) [3]


Можно ли осведомиться, зачем понадобилась такая прецизионность и такая задержка ?

Сдается что копаешь ты не свой огород и не в ту сторону ...


 
Игорь Степанов   (2006-01-25 16:08) [5]

Для психофизиологического теста "Реакция на движущийся объект" мне надо обеспечить движение стрелки нарисованного на экране секундомера  с угловой скоростью 1 оборот в секунду с шагом 8.33 миллисекунды. Всего 120 шагов.

Вот поэтому мне и нужно обеспечить задержку между циклами перерисовки стрелки на 8.33 мсек.

Что бы вы могли посоветовать?

С уважением,

Игорь Степанов


 
Игорь Шевченко ©   (2006-01-25 17:04) [6]


> Что бы вы могли посоветовать?


MS-DOS. Я серьезно. Или установку высокого приоритета приложения. Или смягчение требований к временным характеристикам.


 
MBo ©   (2006-01-25 17:15) [7]

>с угловой скоростью 1 оборот в секунду с шагом 8.33 миллисекунды. Всего 120 шагов.

Меня терзают смутные сомнения...
Такое количество кадров в секунду:
1. Не воспринимается  человеком
2. Трудно отобразить
3. Частоты обновления (кадровая) у абсолютного большинства мониторов не хватит (да и видеокарты обычно не поддерживают)


 
Eraser ©   (2006-01-25 17:21) [8]


> Игорь Степанов   (25.01.06 16:08) [5]

Думаю надо делать как

> Игорь Шевченко ©   (25.01.06 17:04) [6]

> Или установку высокого приоритета приложения.

+ использование ф-ии Sleep(n), где n примерно равно 8... сложно точности добиться будет, если вообще не возможно.
Можно разработать алгоритм, который эврестически будет вычислять при каждом запуске таймера/программы величину n.


 
Digitman ©   (2006-01-25 17:22) [9]


>  шагом 8.33 миллисекунды


откуда взялась сия цифирь ?


 
Игорь Степанов   (2006-01-26 21:36) [10]

Уважаемые мастера,

Действительно, функция GetTickCount более или менее точно работает после 1000 тиков. Она вообще не даёт меньше 15-16 мс при коротких интервалах. Я попробовал функции QueryPerformanceFrequency(res) в паре с QueryPerformanceCounter(t1 или t2), где RES,T1,T2:TLargeInteger (объявлен в модуле Windows.pas). Если справедлива информация в Win32.hlp, то QueryPerformanceFrequency даёт количество отсчётов в секунду. При этом условии формула 1000*(t2-t1)/res даёт разницу в миллисекундах между моментами t1 и t2 применения функции QueryPerformanceCounter. Один оборот стрелки за 120 шагов происходит в среднем за 1001,5 мсек, что вполне приемлемо. Однако прорисовывание стрелки 240 раз добавляет в среднем 17 мсек. Тем не менее, можно рассчитать поправочный коэффциент и обеспечить приемлемую точность. Таким образом, для моих целей этот подход вполне подходит.

Благодарю за участие в дискуссии.

С уважением,
Игорь Степанов



Страницы: 1 вся ветка

Текущий архив: 2006.04.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.036 c
2-1144082129
Vitalik__
2006-04-03 20:35
2006.04.16
edit


15-1142018122
Костя
2006-03-10 22:15
2006.04.16
Архивация


15-1143267479
kilonet
2006-03-25 09:17
2006.04.16
Как обмениваться большими файлами


4-1138543670
Alex_Korn
2006-01-29 17:07
2006.04.16
Обновление ресурсов в DLL


2-1144169054
Вячеслав Бессонов
2006-04-04 20:44
2006.04.16
Запрет закрытия окна