Измерение времени реакции - обеспечение точности данных
Я намерен написать программу, которая будет измерять время реакции. Я еще не уверен насчет языка программирования, который буду использовать. Программа будет использоваться в рамках психологического эксперимента. В идеале я бы хотел, чтобы он работал под Windows.
Но прежде чем приступить к написанию программы, я хотел бы иметь некоторую уверенность в том, что полученные данные о времени реакции будут точными с точностью до нескольких миллисекунд. Один знакомый сказал мне, что в Windows невозможно точно определить время событий, независимо от фоновых процессов (антивирусное сканирование и т. Д.). Прежде всего, это правда? Во-вторых, если это правда, как мне обойти эту проблему? Я использую Linux или...?
3 ответа
Чтобы гарантировать точные данные, вам нужна ОС реального времени. Linux по умолчанию не лучше, чем Windows, но Linux может быть сконфигурирован с ядром с поддержкой реального времени (IIRC).
Подробную информацию о том, как написать такую программу, я предлагаю вам спросить на stack overflow.com.
Теперь на практике вы получите достаточно точные результаты и под Windows. Планирование процесса очень мало повлияет на результаты. Большинство антивирусных программ работает в пользовательском пространстве, что означает, что они находятся в равных условиях с вашим приложением. Лучше всего попробовать и посмотреть.
Специальное оборудование для сбора данных может делать измерения точными в соответствии с вашими бюджетами, независимо от операционной системы и языка. Я наиболее знаком с аппаратным и программным обеспечением National Instruments, но есть и другие поставщики.
Я думаю, это не очень проблематично, я использовал GFA-basic see: https://dl.dropbox.com/u/25791210/gb32.zip
Моя (самая простая) программа работает следующим образом:
Dim x, y, z As Integer
Dim ttt, tijd As Double
nogeens:
Print AT(5, 5); "wait"
Print " (press 'p' when screen goes black)"
Pause 50
Print AT(5, 5) ; "READY ?? "
Pause 40 + Rnd * 20
ttt = Timer
For y = 1 To 550
Line 0, y, 1000, y
Next
While InKey$ <> "p"
Wend
tijd = Timer - ttt
Cls
If tijd < .1
Print "FALSE START",
Print "Press 'p' just AFTER you have seen the screen blackened !!"
Print "press 'q'to try once again"
Else
Print AT(5, 5); tijd
Print "press 'q'to try once again"
EndIf
While InKey$ <> "q"
Wend
Cls
GoTo nogeens