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

Вниз

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

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

Наверх




Память: 0.49 MB
Время: 0.037 c
10-1105532746
grigory
2005-01-12 15:25
2005.10.23
Как произвести экспорт в аутлуке?


3-1126677194
Ньюб2
2005-09-14 09:53
2005.10.23
зависание FB 1.7.2


4-1124447974
Alex870
2005-08-19 14:39
2005.10.23
PID процесса


6-1120492536
Vriter
2005-07-04 19:55
2005.10.23
Информация о дисках удаленной машины


2-1127328135
solomon
2005-09-21 22:42
2005.10.23
Fn клавиша и определение её кода





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский