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

Вниз

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

 
Ромка   (2006-04-10 19:16) [0]

Существует ли в Windows возможность получать (засекать) периоды времени менше 1 милисекунды?
P.S. Я вот видел такие програмы, которие показывают время в отрезках 100-наносекунд


 
Anatoly Podgoretsky ©   (2006-04-10 19:35) [1]

Ипользуй аппаратный таймер, разрешающая способность порядка 300 пикосекунд, но на стабильность отсчетов особо не расчитывай.


 
Ромка   (2006-04-10 20:02) [2]

А как мне добраться до апаратного таймера в Delphi?


 
Anatoly Podgoretsky ©   (2006-04-10 20:07) [3]

ассемблерная команда RDTSC


 
Ромка   (2006-04-10 20:10) [4]

Спасибо. Буду розбиратся.


 
Pavia ©   (2006-04-10 20:15) [5]

QueryPerformanceCounter(var lpPerformanceCount: TLargeInteger);-счетчик
QueryPerformanceFrequency(var lpFrequency: TLargeInteger); - частота
Виндоу будет использовать таймер с наибольшей частотой, каторый есть в системе.
Только учти, система может прервать выполнение одной задачи(потока) и передать на время, выполнение другой(другому).


 
Чародей ©   (2006-04-10 20:57) [6]


> ассемблерная команда RDTSC

Привелигированная команда, придется драйверок писать


> QueryPerformanceCounter(var lpPerformanceCount: TLargeInteger);
> -счетчик
> QueryPerformanceFrequency(var lpFrequency: TLargeInteger);
>  - частота

Интересно, а что с этим делать? В цикле крутить??


 
Pavia ©   (2006-04-10 21:03) [7]

Чародей
Привелегерованная да, но она разрешенна в 3 колце, так что драйвер писать не придеться.
Не советую ей пользоваться,так как частота процессора может меняться из-за функций энерго сбережения.

Да в цикле крутить

Можно еще воспользоваться
GetSystemTimeAdjustment
SetSystemTimeAdjustment


 
Цукор5   (2006-04-11 01:19) [8]

Дядя Рихтер говорит,что сабж (меньше 1 милисекунды) не применим для ОС Win.


 
Котик Б   (2006-04-11 10:10) [9]

Дядя Толя простите - но imho неправильно использовать RDTSC для расчётов времени, особенно на современных процессорах с троттлингом, QnQ и т.п.
Т.к. получить кол-во тактов мы еще сможем, но определить в каком режиме работает CPU (один или несколько) уже труднее.
Ка пример А64 при включении QnQ скидывает частоту практически в ДВА! раза.
Подробнее об использовании RDTSC см. тут
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=455


 
Ромка   (2006-04-12 16:55) [10]

Так как же пользоваться этим RdTSC?
Или может есть какой то другой способ получать время с точностю больше 1 милисекунды?
Использование RdTSC, мне кажется, не подходит для ОС Windows NT


 
Сергей М. ©   (2006-04-12 17:20) [11]


> с точностю больше 1 милисекунды?


Может соизволишь таки информировать общественность, зачем тебе понадобилось такое разрешение ?


 
Ромка   (2006-04-12 17:25) [12]

Пишу прогу, которая должна работать с очень точной периферией. И засекать время с точностю 1 микросекунда, или даже точнее.


 
Игорь Шевченко ©   (2006-04-12 18:14) [13]


> Привелигированная команда, придется драйверок писать


Вроде обычная.


 
Anatoly Podgoretsky ©   (2006-04-12 19:30) [14]

Pavia ©   (10.04.06 20:15) [5]
Можно, только точность падает, из-за вызова функции

Котик Б   (11.04.06 10:10) [9]
Эка вас куда занесло.

Ромка   (12.04.06 17:25) [12]
Не ту ОС используешь, тем более что такие выдержки должны делать аппаратно.

Чародей ©   (10.04.06 20:57) [6]
Сам решил или пробовал?


 
Ромка   (2006-04-12 19:43) [15]

to Anatoly Podgoretsky
но если нет такой функции в самом устройстве, то как можна програмно засекать время с нужной точностю (WinXP)?


 
Pavia ©   (2006-04-12 19:48) [16]

2 Ромка
Определись микросекунда или милисекунда.
10^-3 или 10^-6

var i:int64;
asm
RDTSC
mov DWord[i],eax
mov DWord[i+4],edx
end;
Получаем счетчик t1 в начальный момент времени выполняем некоторую задачу получаем  счетчик t2 разнится и будет время прошедшее. Только учти разные механизмы увеличиваю счетчик за разный периуд времени.
RDTSC счетчик увеличивается  каждый такт процессора.
QueryPerformanceCounter счетчик увеличивается  в зависемости от
QueryPerformanceFrequency
GetTickCount - счетк увеличивается,  каждую микросекунду( 0.001 с)


 
Ромка   (2006-04-12 20:08) [17]

Чем точнее, тем лучше.
Вообще, нужно 0,01 микросекунды. То есть, 10^-8 секунды.


 
Anatoly Podgoretsky ©   (2006-04-12 20:11) [18]

Ромка   (12.04.06 19:43) [15]
RSTSC самое точное, затем идет QueryPerformanceCounter, точнее больше ничего нет. RSTSC это чтение независимого аппаратного счетчика процессора, один тик = один такт генератора. QueryPerformanceCounter работает на этой же основе, только нужна дополнительная коррекция на передачу параметров, вызов и возврат результата.
Величину выдержки которую можно получить при одном и том же вызове колеблется от 1 наносекунды до секунд. ОС не является системой жесткого реального времени, для этого надо уходить в ДОС


 
Ромка   (2006-04-12 20:25) [19]

Но все же, можно ли (надежно ли) Windows использовать RDTSC?
Если да, то так мне перевести такты процессора в наносекунды (или частицы микросекунды)?


 
Anatoly Podgoretsky ©   (2006-04-12 20:35) [20]

Использовать можно, надежно нельзя и не только его, между двумя переключениями задач может пройти любое количество времени, не завивимо это Windows, QNX или другая ОС реального времени. Есть более одного желающего на любой ресурс, например на процессор.
Либо аппаратно, либо ДОС или другие ОС жесткого реального времени, однопрограммные. QNX и подобные дадут более лучшие результаты, но все равно далекие от желаемого.


 
Ромка   (2006-04-12 21:27) [21]

Понятно. Так как же мне перевести такты процессора в время (при использовании RDTSC)?


 
Anatoly Podgoretsky ©   (2006-04-12 21:52) [22]

Калибровка, посчитать количество тактов за 100 мсек в режиме real time
Можно также восспользоваться функцией QueryPerformanceFrequency, как правило это частота тактового генератора.


 
Ромка   (2006-04-12 21:54) [23]

Понятно. Спасибо Anatoly Podgoretsky. Пойду попробую.


 
Fay ©   (2006-04-12 23:28) [24]

2 Anatoly Podgoretsky ©   (12.04.06 21:52) [22]
> как правило это частота тактового генератора
The frequency cannot change while the system is running.

Чего нельзя сказать про частоту.



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

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

Наверх





Память: 0.5 MB
Время: 0.012 c
15-1151655445
Ломброзо
2006-06-30 12:17
2006.07.30
Плагин к IE или Opera


15-1151522536
Avgust
2006-06-28 23:22
2006.07.30
лицензия...


4-1145135285
Vovanchik
2006-04-16 01:08
2006.07.30
Создание формы в чужом окне


3-1148750418
Katyyha
2006-05-27 21:20
2006.07.30
А что-нибудь еще.


2-1152604109
Chort
2006-07-11 11:48
2006.07.30
сделать в смену языка интерфейса программы





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