Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как установить интервал таймера 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 этого не раализовать!


Наверх

Титульная страница Поиск, карта сайта Написать письмо