使用单个计时器功能执行所有事件。为了获得更准确的时序,请将您的计时器设置为每100毫秒执行一次并维护一个计数器。根据计数器值,您可以以不同的时间间隔执行特定任务,并检查时间间隔的重叠情况。当计数器达到您需要跟踪的最大间隔时,计数器可以重置。
这里有一个例子:
var counter = 0;
var oldsec = 0;
setInterval(function(){timerInt()}, 100);
function timerInt(){
// Read system clock and get seconds
if (seconds <> oldsec) {
// Update clock time here and set oldsec=seconds
}
// Execute other tasks
if (counter % 3000 == 0) { // Executes once every 5 minutes (300*10)
}
else if (counter % 1200 == 0) { // Executes once in 2 minutes (120*10)
}
else if (counter % 600 == 0) { // Executes once a minute (60*10)
}
counter += 1;
if (counter == 3000) counter = 0;
}
您可以使用if
和else
,用于控制执行哪些任务。你的时钟秒更新也会更准确,不会像“1000毫秒”定时器那样“跳过”秒。
你能显示你的代码吗? – caasjj
您的代码的相关部分必须发布到您的实际问题中,而不是仅通过外部链接提供。在StackOverflow中这是一条规则,因为外部链接往往会消失或随时间而改变,从而导致问题随着时间的推移而变得无用。 – jfriend00
你不应该使用* setInterval *,因为它不需要在你指定的时间运行,所以每次运行一会儿(可能是纳秒,也许是毫秒,或许更多)。使用* setTimeout *并计算每次下次呼叫的时间。另外,不要设置多个间隔或超时,使用一个超时以所需顺序运行所有逻辑。 – RobG