ActionScript new Date()或getTimer()的毫秒精度

时间:2012-01-28 22:58:10

标签: time computer-science probability

我想测量reaction time of a user。在这个例子中,我正在使用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. 如果概率很低,那么我在这里缺少什么?
  4. 我还应该注意到,我(非常偶然地)收到了12毫秒的响应时间。我正在测试应用程序,碰巧碰到空格键就像红点出现一样。所以,我怀疑我的代码无法判断准确的时间,至少精确到±12ms :)。

2 个答案:

答案 0 :(得分:0)

我认为反应时间有一定程度的正态分布,因此可能会出现一些结果更有可能发生几次的情况。您的反应时间从254到427,这可能是174种不同的结果。问题是在x测试中,在x测试中,有些可能性相同吗?因为它可能是正常分布的,所以增加了。

如果您在计算机上运行它,请记住其他应用程序/线程与CPU交互。此外,操作系统有一些延迟,如果你通过USB或PS / 2连接(USB设备/集线器被轮询,而PS / 2直接连接到IRQ)

答案 1 :(得分:0)

  1. 不,逻辑似乎很好。这是测量ms时间的一种非常简单的方法。
  2. 结果是人类和计算机很少能做到毫秒精确度。
  3. 我正在绊倒的是Flash!
  4. 经过几个月的开关测试,我们发现了问题;语言。从Flex定时器上的ASDOC:

      

    建议不要超过20毫秒的延迟。定时器频率   限制为每秒60帧,意味着延迟低于16.6   毫秒会导致运行时问题。

    Flash以60 FPS的帧速率运行。我想这意味着如果你试图测量时间,并希望精确到16毫秒,那你就不走运了。然而,这确实解释了为什么我会看到重复值,因为这个“60 FPS窗口”中的任何内容都只是同时被测量。