![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 17.10.2010
Сообщений: 3
|
![]()
Добрый День! (Пишу в этот раздел, так как вопрос по большей части касается DirectX).
Мне нужен совет от опытных людей. В данный момент разрабатываю ПО с комплексом тестов на реакцию человека. Опишу вкратце мою задачу и проблемы. Простая реакция человека составляет приблизительно 200 мсек, поэтому требуется погрешность измерения максимум в 3 мсек(тест на простую реакцию представляет собой появление на экране квадрата, после чего человек должен сразу же нажать кнопку). Поэтому для ввода-вывода я решил, что оптимально использовать DirectX(Direct3D и DirectInput), так как предпочтительно ПО планируется под Windows(но это не критерий). В процессе работы были учтены потери в точности на ЖК мониторе (из-за буфера), из-за частоты обновления экрана (и на ЭЛТ в тч). Подсчёт времени производится "Таймером высокого разрешения", клавиатура разобрана для того, чтобы ход клавиши был предельно-минимальным и нажатие хорошо фиксировалось скоростной камерой(по которой мы и сравниваем расчётные результаты с действительными). В результате, с учётом всего вышесказанного получаю "лишние" 25-35 мсек (плавающая погрешность - очень плохо ). С DirectX работаю вовсе впервые, но склоняюсь к тому, что потери где-то ещё в цепочке вывода графики (под графикой в данном случае подразумевается квадрат ). Прошу подсказать, может что-то серьёзное я не учитываю, откуда ещё капают задержки, какими методами можно их минимизировать? Или быть может вывод графики с использованием OpenGL будет предпочтительней, или вовсе единственный выход - писать под DOS на Ассемблере? Так же приветствуются и любые бредовые и бессмысленные рекомендации. Спасибо! |
![]() |
![]() |
![]() |
#2 |
Заблокирован
Регистрация: 27.08.2010
Сообщений: 37
|
![]()
Вот именно. На DOS и на ассемблере. Измерение промежутков времени вещь серьёзная и конечно же лучше всего использовать автономные электронные приборы.
Хотя... DirectX именно то. что нужно, поскольку именно она блокирует все посторние процессы. ОpenGl работает несколько медленнее... Теперь про обновления буфера и тому подобное. Во-первых. Подход к измерению неверный. Таймер абсолютно не нужен. Для этого существует простой и надёжный способ. Как только картинка готова, перед снятием блокировки буфера надо получить системное время. Тут же разрешить реакцию с клавиатуры (обязательно Direct Input) и как только придёт сигнал о нажатии клавиши (KeyDown) опять получить системное время. Потом попросту из него вычесть ранее полученное время. Разница и будет временем реакции. Думаю что точность точно вложится в рамки 3 ms |
![]() |
![]() |
![]() |
#3 |
Регистрация: 17.10.2010
Сообщений: 3
|
![]()
Спасибо за рекомендации.
По поводу системного времени (я так понимаю, имеется ввиду "multimedia timer") - предел его точности 1 мс против 0,001 мс у "таймера высокого разрешения". В остальном всё уже так и сделано |
![]() |
![]() |
![]() |
#4 |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
![]()
Ну, если частота монитора, скажем, 50Гц, то это уже 20 мс погрешности...
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 17.10.2010
Сообщений: 3
|
![]()
Вопрос уже закрыт. Удалось добиться погрешности меньше разрешающей способности измерительного прибора(в расчёт не бралась погрешность из-за низкой скорости отклика пикселя. Время отклика, кстати говоря, гораздо больше часто заявляемых 5 мс и составляла порядка 20 и более мс лишь на изменение цвета пикселя с чёрного на белый!). При использовании USB клавиатуры появлялись дополнительные задержки - тоже интересный факт
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
переопределение ввода и вывода в С++ | blackbanny | Помощь студентам | 12 | 03.05.2010 13:08 |
Перенаправление ввода/вывода | dudeboy | Win Api | 0 | 16.11.2009 11:36 |
система ввода вывода | StudentPolitech | Общие вопросы C/C++ | 3 | 02.04.2009 22:22 |
Программа ввода и вывода последовательности символов(Assembler) | WST | Помощь студентам | 1 | 01.04.2008 12:33 |