Ich versuche, ein Stück Code genau jede Sekunde auszuführen. Ich stelle jedoch fest, dass es zwischen jedem Durchlauf des setInterval einen> 1000ms Zeitunterschied gibt.Wie bekomme ich setInterval, um genau alle n Millisekunden auszuführen?
var incrementUnitCount = function() {
var now = new Date();
console.log('Shift' + now + 'ms' + now.getMilliseconds());
};
setInterval(incrementUnitCount2, interval);
Die Ausgabe sieht wie folgt aus:
js/schedule.js (148) :ShiftTue Mar 28 2017 21:44:05 GMT-0400 (EDT)ms457
js/schedule.js (148) :ShiftTue Mar 28 2017 21:44:06 GMT-0400 (EDT)ms458
js/schedule.js (148) :ShiftTue Mar 28 2017 21:44:07 GMT-0400 (EDT)ms460
js/schedule.js (148) :ShiftTue Mar 28 2017 21:44:08 GMT-0400 (EDT)ms463
js/schedule.js (148) :ShiftTue Mar 28 2017 21:44:09 GMT-0400 (EDT)ms465
js/schedule.js (148) :ShiftTue Mar 28 2017 21:44:10 GMT-0400 (EDT)ms468
js/schedule.js (148) :ShiftTue Mar 28 2017 21:44:11 GMT-0400 (EDT)ms468
js/schedule.js (148) :ShiftTue Mar 28 2017 21:44:12 GMT-0400 (EDT)ms470
js/schedule.js (148) :ShiftTue Mar 28 2017 21:44:13 GMT-0400 (EDT)ms472
Wie gezeigt, zwischen jedem Anruf die Zeitdifferenz 1001ms ist, nicht 1000. Wenn ich eine zeitkritische Anwendung haben, wie kann ich eine Garantie Anruf alle 1000 ms - so etwas wie dieses:
js/schedule.js (148) :ShiftTue Mar 28 2017 21:44:12 GMT-0400 (EDT)ms470
js/schedule.js (148) :ShiftTue Mar 28 2017 21:44:13 GMT-0400 (EDT)ms470
Danke!
Sie können nicht. Was ist die Anwendung? Brauchen Sie eigentlich ein genaues Intervall oder nur eines, das nicht abdriftet? – Ryan
Sie können nicht. Die meisten modernen Benutzer-orientierten Betriebssysteme sind nicht in der Lage, diese Planungsgenauigkeit zu erreichen. –
Hmm, ich denke ich verstehe den Unterschied nicht? Ich denke, ich brauche keinen, der driftet? Ich habe einen Akkumulator, um die gesamte Zeitdauer zu messen, die nach der Drift in die nächste Sekunde aus ist. – Julian