ズレを考慮して次回までの間隔を自動的に調整するタイプのsetIntervalを作成しました。
以下ソース
動作画面



昨日の実験では(10ミリ秒などに比べれば、比較的)間隔が長い分精度が悪くなりにくいと思っていた1000ミリ秒でさえズレのaverageが12ミリ秒、maxだと48ミリ秒!なので「調整できてないじゃん…」と思われるかもしれませんが、この関数の目的はあくまで「初回起動時から計算して次の起動開始時刻がジャストなタイミングになるように間隔を調整することで、ズレの累積を回避する」なので、これで良いのです。
ズレを限りなく0に近づけたいと思うなら、もう少し処理を増やして調整できるかもしれませんが、とりあえず累積的に増えていく点は解消できているので良しとします。
ちなみに、例えば間隔を10ミリ秒とかにして20ミリ秒ぐらいかかる処理を繰り返し実行させるようにすると当然10ミリ秒間隔では処理が実行できません。
計算上ムリなタイミングの分は省略するようにしています。
0 件のコメント:
コメントを投稿