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

Вниз

Как установить интервал таймера 1 микросекунда   Найти похожие ветки 

 
Delphi_is_cool ©   (2005-08-22 16:24) [0]

Минимальный интервал таймера 1 милисекунад, а как сделать
чтоб интервал был 1 микросекунда ?


 
andov   (2005-08-22 16:26) [1]

На сколько я знаю на обычным TTimer этого не раализовать!


 
tesseract ©   (2005-08-22 16:29) [2]

Можно считать такты процессора. Но только в режиме ядра aka драйвер.


 
Delphi_is_cool ©   (2005-08-22 16:29) [3]

Честно говоря всё равно как, главное чтоб работало как надо :)


 
TUser ©   (2005-08-22 16:31) [4]

TTimer и 1 мсек не даст, там точность ниже. Микро можно сделать только на специальном железе, большинство таймеров такой возможности просто не поддерживают. Да и не нужно оно чаще всего.


 
DiamondShark ©   (2005-08-22 16:42) [5]

А с какой целью интересуетесь?


 
Desdechado ©   (2005-08-22 16:49) [6]

Windows - этоне realtime-система, поэтому такой точности она не выдаст НИКОГДА
причем, даже если получится достигнуть что-то лучше 10 миллисек, 98%, что девиация таких интервалов будет зависеть от загруженности ситемы


 
Delphi_is_cool ©   (2005-08-22 17:37) [7]

Значит это не возможно ?


 
DiamondShark ©   (2005-08-22 18:38) [8]


> Delphi_is_cool ©   (22.08.05 17:37) [7]

Это -- невозможно.
Но если скажешь, зачем тебе это понадобилось, может оказаться, что не всё так плохо.


 
SH@RK ©   (2005-08-22 19:24) [9]

Стандартный 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 я не помню.


 
TUser ©   (2005-08-22 19:56) [10]

> Стандартный Timer работает с точностью 55 милисек

Слышал, что эта константа зависит от версии ОС. Так или нет - не проверял.


 
Defunct ©   (2005-08-22 20:39) [11]

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]

так.


 
Eraser ©   (2005-08-22 21:00) [12]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=434


 
DrPass ©   (2005-08-22 23:05) [13]


TUser ©   (22.08.05 19:56) [10]
> Слышал, что эта константа зависит от версии ОС. Так или
> нет - не проверял

55 мсек - это интервал импульсов, которые выдает нулевой канал системного таймера. Это значение не менялось уже четверть века, с тех пор, когда появились первые IBM PC. Традиционно все временные отсчеты в компьютере привязывались к нему. Возможно, современный ПК имеет другие устройства, для более точного измерения времени, которые использует Windows - я не интересовался.


 
Eraser ©   (2005-08-22 23:32) [14]

NT - 10 мс
9x - 55 мс


 
Defunct ©   (2005-08-22 23:44) [15]

DrPass ©   (22.08.05 23:05) [13]
> 55 мсек - это интервал импульсов, которые выдает нулевой канал системного таймера.

Я тоже так думал, до тех пор пока, участвуя в одном из споров на эту тему, не прочитал Рихтера.

> Возможно, современный ПК имеет другие устройства, для более точного измерения времени, которые использует Windows - я не интересовался.

APIC таймер разрешающая способность - 1 такт процессора.


 
KilkennyCat ©   (2005-08-22 23:46) [16]


> [15] Defunct ©   (22.08.05 23:44)


у меня этот спор даже сохранен где-то был... надо найти. Познавательно было.


 
Delphi_is_cool ©   (2005-08-23 01:31) [17]

DiamondShark ©  
>Но если скажешь, зачем тебе это понадобилось, может оказаться, что не всё так плохо.
Личный интерес =)

Defunct ©  
>Это возможно, но не под Windows. Либо если под виндовс - тогда в режиме ядра обрабатывать непосредственно прерывание от APIC таймера (если последний имеется в ниличии).

А что за APIC таймер ?


 
SH@RK ©   (2005-08-23 01:50) [18]

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
Проверьте сами.


 
Defunct ©   (2005-08-23 03:06) [19]

Delphi_is_cool ©   (23.08.05 01:31) [17]

Подробности в документации к процессорам.
доcтуп в делфи через:

  QueryPerformanceCounter()
  QueryPerformanceFrequency()



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

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

Наверх




Память: 0.51 MB
Время: 0.131 c
3-1126685588
Term
2005-09-14 12:13
2005.10.23
Сообщение об ошибке при создании ХП


14-1127659842
Eraser
2005-09-25 18:50
2005.10.23
Перевод фразы на English


1-1128315242
Kacnep
2005-10-03 08:54
2005.10.23
Правильно завершить Приложение при создании


4-1124452484
BFG9k
2005-08-19 15:54
2005.10.23
RAS: Некорректное поведение функции RasGetEntryDialParams


1-1128325284
AlexLines
2005-10-03 11:41
2005.10.23
Как узнать, что приложение запущено под win 95, 98 или win ME