Главная страница
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.023 c
15-1231450495
oxffff
2009-01-09 00:34
2009.03.15
The Future of the Delphi Compiler


2-1232683437
AlexDan
2009-01-23 07:03
2009.03.15
Сепаратор.


2-1232518754
charoey_mag
2009-01-21 09:19
2009.03.15
Потоки и Indy


15-1231656099
vvrz
2009-01-11 09:41
2009.03.15
Delphi и Windows Mobile


2-1232932287
Тимоха
2009-01-26 04:11
2009.03.15
перехват сообщения "восстановить"