![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как установить интервал таймера 1 микросекунда [D5, Win95/98]
Delphi_is_cool © (2005-08-22 16:24:00)Минимальный интервал таймера 1 милисекунад, а как сделать
чтоб интервал был 1 микросекунда ?
Defunct (2005-08-23 03:06:00) [1]Delphi_is_cool © (23.08.05 01:31) [17]
Подробности в документации к процессорам.
доcтуп в делфи через:
QueryPerformanceCounter()
QueryPerformanceFrequency()
SH@RK (2005-08-23 01:50:00) [2]API-шная функция timeSetEventимеет точность 1 милисек, а точнее может выдавать 850 "тиков" в секунду.
http://lib.csu.ru/dl/bases/prg/kompress/articles/2001%5F05%5Ffaronov/
Листинг тестовой программы: http://lib.csu.ru/dl/bases/prg/kompress/articles/2001%5F05%5Ffaronov/list5.htm
Проверьте сами.
Delphi_is_cool (2005-08-23 01:31:00) [3]DiamondShark ©
>Но если скажешь, зачем тебе это понадобилось, может оказаться, что не всё так плохо.
Личный интерес =)
Defunct ©
>Это возможно, но не под Windows. Либо если под виндовс - тогда в режиме ядра обрабатывать непосредственно прерывание от APIC таймера (если последний имеется в ниличии).
А что за APIC таймер ?
KilkennyCat (2005-08-22 23:46:00) [4]
> [15] Defunct © (22.08.05 23:44)
у меня этот спор даже сохранен где-то был... надо найти. Познавательно было.
Defunct (2005-08-22 23:44:00) [5]DrPass © (22.08.05 23:05) [13]
> 55 мсек - это интервал импульсов, которые выдает нулевой канал системного таймера.
Я тоже так думал, до тех пор пока, участвуя в одном из споров на эту тему, не прочитал Рихтера.
> Возможно, современный ПК имеет другие устройства, для более точного измерения времени, которые использует Windows - я не интересовался.
APIC таймер разрешающая способность - 1 такт процессора.
Eraser (2005-08-22 23:32:00) [6]NT - 10 мс
9x - 55 мс
DrPass (2005-08-22 23:05:00) [7]
TUser © (22.08.05 19:56) [10]
> Слышал, что эта константа зависит от версии ОС. Так или
> нет - не проверял
55 мсек - это интервал импульсов, которые выдает нулевой канал системного таймера. Это значение не менялось уже четверть века, с тех пор, когда появились первые IBM PC. Традиционно все временные отсчеты в компьютере привязывались к нему. Возможно, современный ПК имеет другие устройства, для более точного измерения времени, которые использует Windows - я не интересовался.
Eraser (2005-08-22 21:00:00) [8]http://www.delphikingdom.com/asp/viewitem.asp?catalogid=434
Defunct (2005-08-22 20:39:00) [9]Delphi_is_cool © (22.08.05 17:37) [7]
Это возможно, но не под Windows. Либо если под виндовс - тогда в режиме ядра обрабатывать непосредственно прерывание от APIC таймера (если последний имеется в ниличии).
SH@RK © (22.08.05 19:24) [9]
> Стандартный Timer работает с точностью 55 милисек, т.е. "обновляется" 18 раз с секунду (со времён ДОСа знаю).
Стандартный таймер настраивается, и его точность может достигать чуть меньше одной микро секунды (1.193Mhz если мне не изменяет память). В Windows NT таймер настроен на квант времени ~100 микросек, прикладным приложениям событие обновления сист таймера выдается с точностью 10 милисек)
> TUser © (22.08.05 19:56) [10]
так.
TUser (2005-08-22 19:56:00) [10]> Стандартный Timer работает с точностью 55 милисек
Слышал, что эта константа зависит от версии ОС. Так или нет - не проверял.
SH@RK (2005-08-22 19:24:00) [11]Стандартный Timer работает с точностью 55 милисек, т.е. "обновляется" 18 раз с секунду (со времён ДОСа знаю). Но в Win32 можно добится большей точности, используя API-шные функции:
function timeSetEvent(uDelay, uResolution: UINT; lpTimeProc: Pointer; dwUser: DWORD; fuEvent: UINT): Integer; stdcall; external 'winmm';
function timeKillEvent(uID: UINT): Integer; stdcall; external 'winmm';
Сколько раз с секунду "обновляется" этот Timer я не помню.
DiamondShark (2005-08-22 18:38:00) [12]
> Delphi_is_cool © (22.08.05 17:37) [7]
Это-- невозможно.
Но если скажешь, зачем тебе это понадобилось, может оказаться, что не всё так плохо.
Delphi_is_cool (2005-08-22 17:37:00) [13]Значит это не возможно ?
Desdechado (2005-08-22 16:49:00) [14]Windows - этоне realtime-система, поэтому такой точности она не выдаст НИКОГДА
причем, даже если получится достигнуть что-то лучше 10 миллисек, 98%, что девиация таких интервалов будет зависеть от загруженности ситемы
DiamondShark (2005-08-22 16:42:00) [15]А с какой целью интересуетесь?
TUser (2005-08-22 16:31:00) [16]TTimer и 1 мсек не даст, там точность ниже. Микро можно сделать только на специальном железе, большинство таймеров такой возможности просто не поддерживают. Да и не нужно оно чаще всего.
Delphi_is_cool (2005-08-22 16:29:00) [17]Честно говоря всё равно как, главное чтоб работало как надо :)
tesseract (2005-08-22 16:29:00) [18]Можно считать такты процессора. Но только в режиме ядра aka драйвер.
andov (2005-08-22 16:26:00) [19]На сколько я знаю на обычным TTimer этого не раализовать!