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

Вниз

QueryPerformanceFrequency задать временной интервал   Найти похожие ветки 

 
Evgengold   (2009-01-22 18:07) [0]

Добрый вечер. У меня такой вопрос  нужно задать время на выполнение определенной опреции с точностью до микрсек. Для этого использую функцию  QueryPerformanceFrequency и QueryPerformanceCounter. Не нашел нормального описания ип риходится эксперементировать.
Написал код программы но она не выподлняет задержки. В чем может быть ошибка и как использовать эти функции. Большое спасибо
For i7:=1 to 10000 do
begin
 QueryPerformanceFrequency(tFreq);
 QueryPerformanceCounter(tBegin);

 EscapeCommFunction(hPort, SETDTR); // выполнение первой команды
 While  (tEnd - tBegin) / tFreq <0.000026 do QueryPerformanceCounter(tEnd);

 EscapeCommFunction(hPort, CLRDTR);// выполнение второй команды
 QueryPerformanceFrequency(tFreq);
 QueryPerformanceCounter(tBegin);
 While  (tEnd - tBegin) / tFreq <0.000026 do  
   QueryPerformanceCounter(tEnd);
 end;


 
Jeer ©   (2009-01-22 18:13) [1]

Если Вы о настольных версиях Windows, то эта ОС не является системой реального времени.


 
evgengold   (2009-01-22 20:00) [2]

Да! но тем не менее Можно подказать как правильно пользоваться этой функцией!


 
Сергей М. ©   (2009-01-22 20:27) [3]


> evgengold   (22.01.09 20:00) [2]


Вот ты ж фома неверующий)
Ну не получишь ты требуемой тебе прецизионности !
Это в который уже раз тебе сказано - вне ОСРВ или хотя бы без привелегий реального времени в мультизадачной ОС все попытки получить временные выдержки такой точности заведомо обречены на провал.


 
Германн ©   (2009-01-23 00:48) [4]


> Это в который уже раз тебе сказано - вне ОСРВ или хотя бы
> без привелегий реального времени в мультизадачной ОС все
> попытки получить временные выдержки такой точности заведомо
> обречены на провал.

Вроде как у некоторых получается. Ибо нужны короткие пакеты импульсов. Но эти "некоторые" довольно опытные люди (как в знании железа и ОС, так и в программировании). А автор и СОМ-порт ещё только начал осваивать. И разбираться в тех примерах кода, которые есть в И-нете, сам не хочет. :(
Кто-то ему сказал, что такое легко сделать "с наскока".


 
Evgengold   (2009-01-23 10:55) [5]

Зря вы меня раскритиковали! Задержка работает на микросекундах нормально даже при изменении загрузки процессора. конечно есть небольшие отклонения но меня устраивает а ошибка у меня была простая.
Вот нормальный код
tEnd:=0;
For i7:=1 to 1000000 do
begin
 QueryPerformanceFrequency(tFreq);
 QueryPerformanceCounter(tBegin);
 EscapeCommFunction(hPort, SETDTR);
 While  (tEnd - tBegin) / tFreq <0.000011 do  // Задержка 11 микросек
 begin
   QueryPerformanceCounter(tEnd);
 end;
 QueryPerformanceFrequency(tFreq);
 QueryPerformanceCounter(tBegin);
 EscapeCommFunction(hPort, CLRDTR);
 While  (tEnd - tBegin) / tFreq <0.000011 do  // Задержка 11 микросек
 begin
   QueryPerformanceCounter(tEnd);
 end;

 end;


 
Сергей М. ©   (2009-01-23 11:11) [6]

Сегодня работает, а завтра перестанет.
Ибо в системе может быть активным процесс, который имея соответствующие привелегии и приоритет возжелает получить (и получит !) непрерывный квант времени в десятки или сотни микросекунд, что неминуемо приведет к фиаско твою "фомологику" и, как результат, к неработоспособности твоего алгоритма)


 
Jeer ©   (2009-01-23 11:28) [7]


> Evgengold   (23.01.09 10:55) [5]
>
> Зря вы меня раскритиковали!


Тебе не критиковали, для этого ты еще не дорос :)
Просто указали на ограниченность платформы для работы в реал-тайм.



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

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

Наверх




Память: 0.48 MB
Время: 0.029 c
6-1199882403
DmitriyG.
2008-01-09 15:40
2009.03.15
Dump IP сообщения


15-1231904247
Slider007
2009-01-14 06:37
2009.03.15
С днем рождения ! 14 января 2009 среда


2-1232614740
kyn66
2009-01-22 11:59
2009.03.15
Не копируется открытый файл DBF


2-1232537796
fenix96
2009-01-21 14:36
2009.03.15
вывод в StringGrid


15-1231270757
KilkennyCat
2009-01-06 22:39
2009.03.15
Забавные часы