Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Вниз

Использование функции 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.039 c
2-1144061876
Anatolik_
2006-04-03 14:57
2006.04.16
Уважаемые, подскажите есть в реестре ключик, хранящий дату


3-1140342760
parademon
2006-02-19 12:52
2006.04.16
Как получить доступ к TRemoteDataModule


2-1142940985
Ksenom
2006-03-21 14:36
2006.04.16
Не так всё прсто TIdPOP3


2-1143691292
alk
2006-03-30 08:01
2006.04.16
Работа с DCOM


4-1138189970
Dr.Karter
2006-01-25 14:52
2006.04.16
Закрытие других приложений





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский