以毫秒为间隔检测秒数

Posted

技术标签:

【中文标题】以毫秒为间隔检测秒数【英文标题】:Detect the seconds in a millisecond interval 【发布时间】:2015-09-03 19:10:24 【问题描述】:

setInterval 函数中的第二个参数用于延迟执行,以毫秒为单位。正如预期的那样,1000 毫秒每秒将触发该功能。但这是一件我不太明白的奇怪事情。在第二个间隔中,我将延迟参数设置为 1 毫秒,并放入函数增量数字和条件以检查每个传递的 1000 数字。我希望它的行为就像秒间隔计时器一样。但它并没有像我希望的那样运行。

对此有什么解释吗?

// detect seconds in a second interval timer (works as expected)
setInterval(function() 
    console.log('passed second from the secondInterval');
, 1e3);

// detect seconds in a millisecond interval timer (I don't have any explanation for the behavior).
(function() 
    var i = 0;
    setInterval(function() 
        if (i === 0) 
            i++;
            return;
        

        if (i % 1000 === 0) console.log('passed second from the millisecondInterval');
        i++;
    , 1);
)();

查看 jsfiddle 中的示例以了解我的意思 http://jsfiddle.net/dwh82zos/

【问题讨论】:

***.com/questions/9647215/… 延迟以毫秒表示,但没有毫秒精度。更多地将其视为建议。您真的希望网页每秒运行 1000 次代码吗?真正的最小值可能约为 10-15 毫秒,具体取决于浏览器、操作系统等。 @Cameron 如果您正在处理动画帧并且您确实需要它如此准确,那将非常糟糕。 @symcbean.. 我认为这很清楚。我需要比较毫秒计时器和秒计时器中的秒数检测。我在问为什么它不能按预期工作!你有什么不明白的?! @Husamuddin:你可以足够准确地measure time,只是你不能以精确的时间间隔调用你的回调。原生游戏也有完全相同的问题——例如,Win32 的睡眠分辨率只有 10-15 毫秒之内,而且总是有抖动,这取决于系统上运行的其他内容等。查看requestAnimationFrame——浏览器为您管理回调间隔。 【参考方案1】:

会发生这种情况。该句子不是每秒记录一次,也不是你的机器可以记录的任何内容。您的内存不足,无法解决,第一次每 1 毫秒 6 次操作,第二次每 1 毫秒 3 次操作。 看看这个What is minimum millisecond value of setTimeout? 它是关于 setTimeout 但它很有用。

【讨论】:

以上是关于以毫秒为间隔检测秒数的主要内容,如果未能解决你的问题,请参考以下文章

无法在异步间隔中清除计时器

面试官:Netty心跳检测机制是什么,怎么自定义检测间隔时间?

以毫秒为单位获取间隔

iOS WatchOS5 - 如何以编程方式检测 Apple Watch 是不是在特定时间间隔戴在手腕上(佩戴)?

从多元时间序列间隔中检测罕见事件

一个时钟