Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Real-Time под Windows2000/XP  (Прочитано 8851 раз)
0 Пользователей и 6 Гостей смотрят эту тему.
Rulik
Помогающий

ru
Offline Offline

« : 13-10-2004 09:12 » 

Народ помогите.
Надо написать прогу, которая с точностью до 2мс будет выдавать в порт данные. Использую объект ядра-таймер, отдельный поток и повышаю у этого потока приоритет до максимума. Но если начинают таскать окна по экрану, у меня начинает сбиватся программа и интервалы вообще не выдерживаются.
Записан
Серж
Гость
« Ответ #1 : 13-10-2004 10:07 » 

Rulik, почитай в MSDN про мультимедийные таймеры, функцию timeGetTime и т.п., Microsoft их использует как раз для этих целей.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #2 : 13-10-2004 11:19 » new

ИМХО это не возможно, если не блокировать на время отсылки переключение контента...
А 2мс - оченбь маленькое вермя для таймера винды Жаль
Записан

А птичку нашу прошу не обижать!!!
Serega
Гость
« Ответ #3 : 13-10-2004 13:54 » 

Multimedia Timers это решение
Записан
Migmile
Помогающий

ru
Offline Offline

« Ответ #4 : 13-10-2004 17:22 » 

Гарантии в виндах не даст даже большой Билл! Мультимедийный таймер - наиболее быстрый, точнее, частый Отлично
Записан
Pu
Большой босс

ru
Offline Offline
78


« Ответ #5 : 14-10-2004 05:49 » 

Migmile, это точно, винды не являются системой real time.
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 14-10-2004 07:26 » 

Парни, мы уже где-то обсуждали на форуме (времени нет искать). Жаль
Может попробовать QueryPerformanceCounter?
Вот такую функцию задержки использовал для протоколов параллельного порта
время в микросекундах:

Код:

void Wait)int mks:
|
static __int64 nFreq = 0;
__int64 nTime;
LARGE_INTEGER liTime;
__int64 nStart;
LARGE_INTEGER liStart;

if )nFreq == 0:
|
LARGE_INTEGER liFreq;
{{QueryPerformanceFrequency)&liFreq:;
nFreq = liFreq.QuadPart;
"

{{QueryPerformanceCounter)&liStart:;
nStart = liStart.QuadPart;
{{QueryPerformanceCounter)&liTime:;
nTime = liTime.QuadPart;
while ))nTime - nStart: < ))__int64:mks * 1000000 / nFreq::
|
{{QueryPerformanceCounter)&liTime:;
nTime = liTime.QuadPart;
"
"
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Rulik
Помогающий

ru
Offline Offline

« Ответ #7 : 14-10-2004 08:32 » 

Порывшись в MSDN  обнаружил одну особенность, таймер ядра страбатывает во время, но поток просыпается тока тогда когда ему будет выделено время. А если система занята, то и не выделяет ему время. Проблему решил следующим образом, приложению выставляю класс приоритета Real-Time, потоку приоритет Real-Time.

Про QueryPerformanceCounter, могу сказать одно - это расточительство ресурсов процессора. И нет гарантий, что когда он досчитает до нужного момента, вас не прервут и вы не пропустите момент. Хочу еще напомнить о том что процессорное время распределяется квантами. По завершении кванта, у проги все равно отберут процессор.

Достиг точности срабатывания в +-0,9 мс.
А если потребуется точнее, то мне прийдется идти на уровень ядра, со своим драйвером.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines