Точность в миллисекундах ActionScript new Date () или getTimer () - PullRequest
1 голос
/ 29 января 2012

Я бы хотел измерить время реакции пользователя .В этом примере я использую Actionscript, но концепция действительно важна, поэтому не стесняйтесь отвечать на выбранном вами языке, если вы хотите показать какой-либо код.

Пользователь сидит передэкран и будет представлен с красной точкой.Когда они видят красную точку, они ударяются о пробел.

Моя логика такова: сделать видимой красную точку, создать новую дату, дождаться пробела, создать новую дату, найти разницу в миллисекундах, используя TimeSpan объект.

//listen for the keystroke
this.systemManager.stage.addEventListener(KeyboardEvent.KEY_DOWN, catchSpace, true, 1);
...
if (e.keyCode == Keyboard.SPACE) {
  e.preventDefault();
  this.dispatchEvent(new PvtEvent(PvtEvent.BTN_CLICK));
}

//show the red dot, making note of the time
redDot.visible = true;
this.startCount=new Date();

//user clicks the space bar
this.endCount=new Date();
var timeSpan:Number=TimeSpan.fromDates(this.startCount, this.endCount).totalMilliseconds;

Я чувствую, что это должно работать, но я получаю некоторые значения, которые сбивают с толку.Вот типичный набор результатов:

[254, 294, 296, 305, 306, 307, 308, 309, 310, 308, 312, 308, 338, 346, 364, 370, 380, 387, 395, 402, 427]

Обратите внимание, что некоторые значения близки, и 308 записывается несколько раз.Итак, мои вопросы таковы:

  1. Является ли мой код или логика, которую я использую, каким-то образом некорректной?
  2. Какова вероятность того, что пользователь сможетпроизводить повторы?
  3. Если вероятность низкая, то чего мне здесь не хватает?

Следует также отметить, что я получил (совершенно случайно) время отклика 12 мс.Я тестировал приложение и случайно столкнулся с пробелом, когда появилась красная точка.Поэтому я сомневаюсь, что мой код не может судить точное время, по крайней мере, с точностью ± 12 мс :).

Ответы [ 2 ]

0 голосов
/ 24 июля 2012
  1. Нет, логика кажется в порядке. Это совершенно простой способ измерения времени в мс.
  2. Оказывается, люди и компьютеры редко могут сделать что-либо с точностью до миллисекунды.
  3. То, на что я спотыкаюсь, это Flash!

После нескольких месяцев включения и выключения мы выяснили проблему; язык. Из ASDOC на гибкий таймер:

Задержка ниже 20 миллисекунд не рекомендуется. Частота таймера ограничено 60 кадрами в секунду, что означает задержку ниже 16,6 миллисекунды вызывают проблемы во время выполнения.

Вспышка работает с частотой кадров 60 кадров в секунду. Я предполагаю, что это означает, что если вы пытаетесь измерить время и хотите быть точным с точностью до 16 мс, вам не повезло. Однако это объясняет, почему я вижу повторяющиеся значения, поскольку что-либо в этом «окне 60 FPS» измеряется как одно и то же время.

0 голосов
/ 05 июня 2012

Я полагаю, что время реакции имеет несколько нормальное распределение, поэтому может быть так, что некоторые результаты с большей вероятностью будут встречаться несколько раз.Время вашей реакции от 254 до 427, то есть 174 возможных разных результатов.Итак, вопрос в тестах x, насколько вероятно, что в тестах x некоторые из них совпадают?поскольку он, вероятно, нормально распределен, это увеличивается.

Если вы запускаете его на своем компьютере, помните, что другие приложения / потоки взаимодействуют с процессором.Далее, некоторая задержка в ОС и при подключении через USB или PS / 2 (USB-устройство / концентратор опрашивается, а PS / 2 подключается напрямую к IRQ)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...