Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Процессы реального времени в Windows2000

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
shenon
Гость





СообщениеДобавлено: Пн Май 26 2003 18:29    Заголовок сообщения: Процессы реального времени в Windows2000 Ответить с цитатой

Имеется некоторая программа написанная для Windows. Некоторая процедура сидит на таймере получает данные из внешнего устройства и записывает их в файл. Параллельно с ней работает другая программа - Microsoft Windows 2000 , которая мешает работать первой программе. В момент, когда вторая программа начинает перерисовывать свои окна, в первой откладываются события таймера. В результате внешенее усторойство накапливает данные непрочитанные из-за перерисовки окон и икон на экране. После переполнения данных в выходном буффере устройства данные теряются, что недопустимо.

Пробывал создать процесс считывания, как невидимое окно WS_DISABLED - типа , то есть недоступное. Запускал его с приоритетом рельного времени
HANDLE process=GetCurrentProcess();
if (!SetPriorityClass(process,REALTIME_PRIORITY_CLASS)) {...}
Пробывал на таймер посадить функцию
VOID CALLBACK TimerProc(
HWND hwnd, // handle of window for timer messages
UINT uMsg, // WM_TIMER message
UINT idEvent, // timer identifier
DWORD dwTime // current system time
){...};
SetTimer( hWnd, 1, 1, (TIMERPROC )TimerProc); //ставим таймер на 1 мсек
Кажется стало немного лучше, но не радикально.

Стоит нажать на одну из трёх кнопок в правом верхнем углу любого окна, как
тут-же возникают задержки чтения устройства более 13 мсек. Подскажите кто-нибудь, как заставить Windows2000 или другую систему не блокировать события таймера. Ведь не блокирует же она движение мыши на время перерисовки окон.
Вернуться к началу
and3008



Зарегистрирован: 12.10.2001
Сообщения: 14893
Откуда: Н.Новгород

СообщениеДобавлено: Пн Май 26 2003 20:04    Заголовок сообщения: Рассказываю (+) Ответить с цитатой

Windows (ЛЮБОЙ) не является системой реального времени. Лучше сразу смотреть в сторону QNX или других UNIX-систем.

Мышка говоришь не тормозит? Хе-хе. Еще как тормозит. У меня на серваке бывает тяжелые SQL-запросы гоняют. Нагрузка такая, что даже два 3 Гигагерцовых Xeon-а не справляются. Мыша при этом тормозит "не по-детски". Smile
И это на Win2000 Server.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dilnab



Зарегистрирован: 11.07.2002
Сообщения: 100

СообщениеДобавлено: Вт Май 27 2003 12:32    Заголовок сообщения: Фигня все это не надо грешить на Win2000. Просто весь функционал нужно перенести на отдельную нитку (отличную от нитки основног Ответить с цитатой

Фигня все это не надо грешить на Win2000. Просто весь функционал нужно перенести на отдельную нитку (отличную от нитки основного процесса), поскольку нитка основного процесса загружено отображением содержимого окна и т.д.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Valera
Гость





СообщениеДобавлено: Ср Май 28 2003 10:13    Заголовок сообщения: Создай отдельный поток присвой ему realtime и в нем опрашивай свои устройства. Можешь еще заблокировать другие потоки. (-) Ответить с цитатой

-
Вернуться к началу
shenon
Гость





СообщениеДобавлено: Ср Май 28 2003 10:28    Заголовок сообщения: Я так и сделал. Почти всё работает но есть одна кнопка Пуск в левом нижнем угле, которая тормозит таймер. Ответить с цитатой

Вернуться к началу
Sclis
Гость





СообщениеДобавлено: Чт Май 29 2003 04:37    Заголовок сообщения: Re: Процессы реального времени в Windows2000 Ответить с цитатой

В виндах графическая подсистема выполняется в режиме ядра, так что извиняйте, никакими приоритетами это не переплюнешь. And3008 прав, Винда изначально не предназначена для работы в реальном времени и тут тоже ничего не поделаешь. А впечатление, что скорость достаточна появляется от того, что ресурсов с избытком - задержка мышки на 13 мс, извини, не критичнаSmile. "- А работают же сетевые карты или звуковые или модемы?"... фокус в том, что там используются буферы внутренние Smile)Там хранятся данные, если система занята. Для такой системы которую ты пытаешься выстроить можно попробовать:
1. действительно перейти на настоящую систему реального времени, но сие чревато тупиком, большинство таких встроенных систем сделаны НА БАЗЕ *nix, (с большим переписыванием кода). Все это должно абсолютно согласовываться с железом и главное требование к таким системам - гарантированная ОТВЕТНАЯ реакция за заданное время - то бишь, для простого сбора данных это явно избыток.
2. Использовать промышленные контроллеры с буферами, а не просто писать в порт, есть такие штуки, продаются и используются предприятиями для контроля произв. процесса (тебе же именно для того надо?). Это решение самое лучшее, поскольку стандартное и обернуто нужным числом предложений на рынке, систем программирования, обучающих курсов...
3. Абсолютный тупик: в NT 3.5 графика выполнялась в пользовательском режиме Smile если наворотишь машину, поставишь на нее 3.5 и запретишь юзерам запускать тяжелые приложения то (возможно) низкая вероятность потери данных тебя и устроит Smile но потом от такого чуда будет трудно уйти, даже если получитсяSmile
Вернуться к началу
shenon
Гость





СообщениеДобавлено: Чт Май 29 2003 13:48    Заголовок сообщения: Тем не менее Ответить с цитатой

Графическую систему в основном победить удалось с помоьщью установки конфигурации таймеров, тредов, приоритетов и процессов. Все программы спокойно жили не блокировали блокировали мой таймер. Среди них C++Builder, WinAmp,WinCommander, MathCad, WordPad, IExplorer. Но кнопка Пуск оказалась непобедимой.
Насчёт второго варианта не понял в чём идея.
В моём устройстве тоже есть буффер, которого хватает на 13 мсекунд. Хотелось бы точно знать: дело всего лишь в его объёме этого буффера или дело в принципе, то есть при любом объеме всегда может возникнуть ситуация, когда Windows захочет заблокировать таймер на 13 мсек или на 100 мсек, а может и на 1000 мсек.

Не знает ли кто нибудь RTX - Real Time Extension for Windows?
Вернуться к началу
Sclis
Гость





СообщениеДобавлено: Пт Май 30 2003 04:43    Заголовок сообщения: Re: Тем не менее Ответить с цитатой

так ты поток постоянный читаешь? не дискретная выборка? круто Smile
"при любом объеме.." - наверно да, только вероятнось этого сильно падает с величиной буфера и возрастает с количеством и прожорливостью клиентских программ. (а на каком-то этапе винда сама грохнется, избавив от необходимости вешаться программу Smile) )
Мне кажется, тогда главная проблема у тебя не в программировании, а организационная Smile Нужен выделенный комп под это дело. Чтобы не возникало необходимости WinAmp и т.д. запускать на нем Smile Нет же гарантии, что пользователь не захочет запустить все приложения сазу и в трех экземплярах. Какой нибудь пентиум с легкой ОС и быстрым хардом, заблокировать клавиатуру, отключить монитор и мышь и поставить его в шкаф Smile а данные архивировать по сети. и защита от вирусов будет и от случайных ошибок и т.д. полноценный сервер Smile
Потому как, допустим, пинболл занимает проц на 100% или адобе акробат при перетаскивании документаSmile И они составят достойную конкуренцию кнопке "Пуск" Smile мне так кааатся Smile
Вернуться к началу
Alex369



Зарегистрирован: 01.08.2003
Сообщения: 7

СообщениеДобавлено: Пт Авг 01 2003 14:56    Заголовок сообщения: Re: Процессы реального времени в Windows2000 Ответить с цитатой

По какому порту работаешь? Стандартные дровишки пробоват юзить, у меня без проблем на RS232 на отдельных потоках прием и передача.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...