Программа без фронт-панели

Простейшие вопросы в области инженерной разработки
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Программа без фронт-панели

Сообщение Boris_K »

И какой толк от этой смены приоритета для :labview: , уже тестил, не влияет. :cry: Завтра пробую регистрировать сервис, а потом забиваю на эту проблему.

Пока вывод такой, что лучше не юзать WinXP, не будет тех больших задержек 250 - 270 мс.
Race conditions - опасный и скользкий баг!
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Программа без фронт-панели

Сообщение dadreamer »

Boris_K писал(а):И какой толк от этой смены приоритета для :labview: , уже тестил, не влияет. :cry: Завтра пробую регистрировать сервис, а потом забиваю на эту проблему.
Ну так вы пишете, что для приоритета реального времени тормоза почти не появляются. Этот :vi: как раз меняет приоритет процесса в ОС - проверьте через диспетчер задач.
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Программа без фронт-панели

Сообщение Boris_K »

Так это для той проги на другом языке (Blitz Plus), я же про неё писал. А на :labview: тоже пробовал аналогию. И способ с приоритетом не сработал. Вот этот пост: http://labviewportal.org/viewtopic.php?p=70497#p70497
Race conditions - опасный и скользкий баг!
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 127 раз
Контактная информация:

Re: Программа без фронт-панели

Сообщение dadreamer »

Состряпал вот в Дельфях аналогичную программку без GUI. Код следующий:
[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.
Экзешник + исходники:
background_app.rar
D7
(24.63 КБ) 86 скачиваний
На том же железе и ОС, что я уже упоминал, получается следующее (5 запусков):
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
Если активировать вывод в консоль вместо файла, то время становится около 15-20 мс (то же самое, если запускать из-под отладчика). А если дополнительно "мурыжить" эту консоль (нажимать-удерживать мышью заголовок, таскать скроллбары, щёлкать мышью в текстовом поле и т.п.), то время может доходить до 100-200 мс. Видимо, тоже влияние GUI событий сказывается. Но эта инфа носит больше информационный характер: нам консоль не нужна, отключаем её и работаем с "голым" процессом.
В общем, вывод таков, что стабильной точности времени в пределах 10 мс на Винде не достичь из-за её природы (архитектуры). Если нужна точность в несколько милли- или даже микросекунд, нужно использовать контроллер на ОСРВ (они для этого как раз и предназначены).
Boris_K
developer
developer
Сообщения: 281
Зарегистрирован: 28 янв 2015, 14:25
Версия LabVIEW: 2012 Pro

Re: Программа без фронт-панели

Сообщение Boris_K »

dadreamer, основной сабж этой темы раскрыт, а насчёт обсуждения задержек - перейдём в более подходящую тему: http://www.labviewportal.org/viewtopic. ... 513#p70513
Race conditions - опасный и скользкий баг!
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»