И какой толк от этой смены приоритета для , уже тестил, не влияет. Завтра пробую регистрировать сервис, а потом забиваю на эту проблему.
Пока вывод такой, что лучше не юзать WinXP, не будет тех больших задержек 250 - 270 мс.
Программа без фронт-панели
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Программа без фронт-панели
Ну так вы пишете, что для приоритета реального времени тормоза почти не появляются. Этот как раз меняет приоритет процесса в ОС - проверьте через диспетчер задач.Boris_K писал(а):И какой толк от этой смены приоритета для , уже тестил, не влияет. Завтра пробую регистрировать сервис, а потом забиваю на эту проблему.
Re: Программа без фронт-панели
Так это для той проги на другом языке (Blitz Plus), я же про неё писал. А на тоже пробовал аналогию. И способ с приоритетом не сработал. Вот этот пост: http://labviewportal.org/viewtopic.php?p=70497#p70497
Race conditions - опасный и скользкий баг!
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Программа без фронт-панели
Состряпал вот в Дельфях аналогичную программку без GUI. Код следующий:
В общем, вывод таков, что стабильной точности времени в пределах 10 мс на Винде не достичь из-за её природы (архитектуры). Если нужна точность в несколько милли- или даже микросекунд, нужно использовать контроллер на ОСРВ (они для этого как раз и предназначены).
Экзешник + исходники: На том же железе и ОС, что я уже упоминал, получается следующее (5 запусков):[color=#800040]D7 Source[/color] писал(а):program Project1;
//{$APPTYPE CONSOLE}
uses
SysUtils, Windows, Math;
var
i: Integer;
dbl, TimeInMs,
old_time, old_max_ms, old_min_ms: Double;
iCounterPerSec, //тактовая частота процессора (количество тактов в секунду)
T1, T2: TLargeInteger; //значение счётчика ДО и ПОСЛЕ операции
F: TextFile;
begin
//определяем тактовую частоту процессора (количество тактов в секунду)
QueryPerformanceFrequency(iCounterPerSec);
//замеряем время начала работы
QueryPerformanceCounter(T1);
old_time := 0;
old_max_ms := 0;
old_min_ms := MaxDouble;
repeat //основной цикл
//мат. нагрузка для эмуляции работы программы
dbl:=5.0236;
for i:=0 to 10000 do
dbl:=1/( ( sqr( (dbl+i)/(i+1) ) )*2*pi );
//конец нагрузки
//замеряем время окончания работы
QueryPerformanceCounter(T2);
TimeInMs := ( (T2-T1)/iCounterPerSec ) * 1000;
//Writeln(FormatFloat('0.00', TimeInMs) + ' ms');
//запоминаем мин./макс. значения времени
if (TimeInMs-old_time)>old_max_ms then
old_max_ms := TimeInMs - old_time; //new_max_ms
if (TimeInMs-old_time)<old_min_ms then
old_min_ms := TimeInMs - old_time; //new_min_ms
old_time := TimeInMs;
Sleep(2);
until (TimeInMs > 90000); //конец основного цикла
(*
Writeln('Result values: min time = ' + FormatFloat('0.00', old_min_ms) +
' ms, max time = ' + FormatFloat('0.00', old_max_ms) + ' ms');
Readln;
*)
//выводим времена в текстовый файл
AssignFile(F,ExtractFilePath(ParamStr(0))+'times.txt');
if not FileExists(ExtractFilePath(ParamStr(0))+'times.txt') then
begin
Rewrite(F);
CloseFile(F);
end;
Append(F);
Writeln(F,'Result values: min time = ' + FormatFloat('0.00', old_min_ms) +
' ms, max time = ' + FormatFloat('0.00', old_max_ms) + ' ms');
Flush(F);
CloseFile(F);
end.
Если активировать вывод в консоль вместо файла, то время становится около 15-20 мс (то же самое, если запускать из-под отладчика). А если дополнительно "мурыжить" эту консоль (нажимать-удерживать мышью заголовок, таскать скроллбары, щёлкать мышью в текстовом поле и т.п.), то время может доходить до 100-200 мс. Видимо, тоже влияние GUI событий сказывается. Но эта инфа носит больше информационный характер: нам консоль не нужна, отключаем её и работаем с "голым" процессом.Result values: min time = 0,28 ms, max time = 4,33 ms
Result values: min time = 0,41 ms, max time = 7,14 ms
Result values: min time = 0,26 ms, max time = 8,31 ms
Result values: min time = 0,46 ms, max time = 4,14 ms
Result values: min time = 0,41 ms, max time = 7,98 ms
В общем, вывод таков, что стабильной точности времени в пределах 10 мс на Винде не достичь из-за её природы (архитектуры). Если нужна точность в несколько милли- или даже микросекунд, нужно использовать контроллер на ОСРВ (они для этого как раз и предназначены).
Re: Программа без фронт-панели
dadreamer, основной сабж этой темы раскрыт, а насчёт обсуждения задержек - перейдём в более подходящую тему: http://www.labviewportal.org/viewtopic. ... 513#p70513
Race conditions - опасный и скользкий баг!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 7 Ответы
- 297 Просмотры
-
Последнее сообщение dadreamer