using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; using System.Threading; namespace Fixed_Timed_Step { class Program { static void Main(string[] args) { for (int i = 0; i < 4; i++) { FixedLoop(); } Console.WriteLine("Loop done."); Console.ReadKey(); } static void FixedLoop() { System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Start(); double dt = 1000.0 / 60; double targetTime = 0; int i = 1; while (targetTime + dt/2 < 1000) { long currentTime = sw.ElapsedMilliseconds; if (currentTime < targetTime) { Thread.Sleep((int) (targetTime - currentTime)); } else if (currentTime > targetTime + 100) { targetTime = currentTime; // we're too late, give up } Console.WriteLine("Update " + i + " at t=" + sw.ElapsedMilliseconds + " (target=" + targetTime + ")"); i++; targetTime += dt; } } } }
Standard input is empty
Update 1 at t=0 (target=0) Update 2 at t=25 (target=16.6666666666667) Update 3 at t=34 (target=33.3333333333333) Update 4 at t=51 (target=50) Update 5 at t=67 (target=66.6666666666667) Update 6 at t=84 (target=83.3333333333333) Update 7 at t=101 (target=100) Update 8 at t=117 (target=116.666666666667) Update 9 at t=134 (target=133.333333333333) Update 10 at t=151 (target=150) Update 11 at t=167 (target=166.666666666667) Update 12 at t=184 (target=183.333333333333) Update 13 at t=200 (target=200) Update 14 at t=217 (target=216.666666666667) Update 15 at t=234 (target=233.333333333333) Update 16 at t=250 (target=250) Update 17 at t=267 (target=266.666666666667) Update 18 at t=284 (target=283.333333333333) Update 19 at t=301 (target=300) Update 20 at t=317 (target=316.666666666667) Update 21 at t=334 (target=333.333333333333) Update 22 at t=351 (target=350) Update 23 at t=367 (target=366.666666666667) Update 24 at t=384 (target=383.333333333333) Update 25 at t=401 (target=400) Update 26 at t=417 (target=416.666666666667) Update 27 at t=434 (target=433.333333333333) Update 28 at t=451 (target=450) Update 29 at t=467 (target=466.666666666667) Update 30 at t=484 (target=483.333333333334) Update 31 at t=501 (target=500) Update 32 at t=517 (target=516.666666666667) Update 33 at t=534 (target=533.333333333333) Update 34 at t=551 (target=550) Update 35 at t=567 (target=566.666666666667) Update 36 at t=584 (target=583.333333333333) Update 37 at t=601 (target=600) Update 38 at t=617 (target=616.666666666667) Update 39 at t=634 (target=633.333333333333) Update 40 at t=650 (target=650) Update 41 at t=667 (target=666.666666666667) Update 42 at t=684 (target=683.333333333333) Update 43 at t=700 (target=700) Update 44 at t=717 (target=716.666666666666) Update 45 at t=734 (target=733.333333333333) Update 46 at t=750 (target=750) Update 47 at t=767 (target=766.666666666666) Update 48 at t=784 (target=783.333333333333) Update 49 at t=800 (target=800) Update 50 at t=817 (target=816.666666666666) Update 51 at t=834 (target=833.333333333333) Update 52 at t=850 (target=849.999999999999) Update 53 at t=867 (target=866.666666666666) Update 54 at t=884 (target=883.333333333333) Update 55 at t=900 (target=899.999999999999) Update 56 at t=917 (target=916.666666666666) Update 57 at t=934 (target=933.333333333333) Update 58 at t=950 (target=949.999999999999) Update 59 at t=967 (target=966.666666666666) Update 60 at t=984 (target=983.333333333332) Update 1 at t=0 (target=0) Update 2 at t=16 (target=16.6666666666667) Update 3 at t=34 (target=33.3333333333333) Update 4 at t=51 (target=50) Update 5 at t=66 (target=66.6666666666667) Update 6 at t=84 (target=83.3333333333333) Update 7 at t=101 (target=100) Update 8 at t=116 (target=116.666666666667) Update 9 at t=134 (target=133.333333333333) Update 10 at t=151 (target=150) Update 11 at t=166 (target=166.666666666667) Update 12 at t=184 (target=183.333333333333) Update 13 at t=200 (target=200) Update 14 at t=217 (target=216.666666666667) Update 15 at t=234 (target=233.333333333333) Update 16 at t=250 (target=250) Update 17 at t=267 (target=266.666666666667) Update 18 at t=284 (target=283.333333333333) Update 19 at t=301 (target=300) Update 20 at t=317 (target=316.666666666667) Update 21 at t=334 (target=333.333333333333) Update 22 at t=351 (target=350) Update 23 at t=367 (target=366.666666666667) Update 24 at t=384 (target=383.333333333333) Update 25 at t=401 (target=400) Update 26 at t=417 (target=416.666666666667) Update 27 at t=434 (target=433.333333333333) Update 28 at t=450 (target=450) Update 29 at t=467 (target=466.666666666667) Update 30 at t=484 (target=483.333333333334) Update 31 at t=501 (target=500) Update 32 at t=517 (target=516.666666666667) Update 33 at t=534 (target=533.333333333333) Update 34 at t=551 (target=550) Update 35 at t=567 (target=566.666666666667) Update 36 at t=584 (target=583.333333333333) Update 37 at t=601 (target=600) Update 38 at t=617 (target=616.666666666667) Update 39 at t=634 (target=633.333333333333) Update 40 at t=650 (target=650) Update 41 at t=667 (target=666.666666666667) Update 42 at t=684 (target=683.333333333333) Update 43 at t=700 (target=700) Update 44 at t=717 (target=716.666666666666) Update 45 at t=734 (target=733.333333333333) Update 46 at t=750 (target=750) Update 47 at t=767 (target=766.666666666666) Update 48 at t=783 (target=783.333333333333) Update 49 at t=799 (target=800) Update 50 at t=817 (target=816.666666666666) Update 51 at t=834 (target=833.333333333333) Update 52 at t=850 (target=849.999999999999) Update 53 at t=867 (target=866.666666666666) Update 54 at t=884 (target=883.333333333333) Update 55 at t=900 (target=899.999999999999) Update 56 at t=917 (target=916.666666666666) Update 57 at t=934 (target=933.333333333333) Update 58 at t=950 (target=949.999999999999) Update 59 at t=967 (target=966.666666666666) Update 60 at t=984 (target=983.333333333332) Update 1 at t=0 (target=0) Update 2 at t=16 (target=16.6666666666667) Update 3 at t=33 (target=33.3333333333333) Update 4 at t=50 (target=50) Update 5 at t=66 (target=66.6666666666667) Update 6 at t=83 (target=83.3333333333333) Update 7 at t=100 (target=100) Update 8 at t=116 (target=116.666666666667) Update 9 at t=133 (target=133.333333333333) Update 10 at t=150 (target=150) Update 11 at t=166 (target=166.666666666667) Update 12 at t=183 (target=183.333333333333) Update 13 at t=200 (target=200) Update 14 at t=216 (target=216.666666666667) Update 15 at t=233 (target=233.333333333333) Update 16 at t=250 (target=250) Update 17 at t=266 (target=266.666666666667) Update 18 at t=284 (target=283.333333333333) Update 19 at t=300 (target=300) Update 20 at t=316 (target=316.666666666667) Update 21 at t=333 (target=333.333333333333) Update 22 at t=351 (target=350) Update 23 at t=367 (target=366.666666666667) Update 24 at t=384 (target=383.333333333333) Update 25 at t=400 (target=400) Update 26 at t=416 (target=416.666666666667) Update 27 at t=434 (target=433.333333333333) Update 28 at t=451 (target=450) Update 29 at t=467 (target=466.666666666667) Update 30 at t=484 (target=483.333333333334) Update 31 at t=501 (target=500) Update 32 at t=517 (target=516.666666666667) Update 33 at t=534 (target=533.333333333333) Update 34 at t=551 (target=550) Update 35 at t=567 (target=566.666666666667) Update 36 at t=584 (target=583.333333333333) Update 37 at t=601 (target=600) Update 38 at t=617 (target=616.666666666667) Update 39 at t=634 (target=633.333333333333) Update 40 at t=650 (target=650) Update 41 at t=667 (target=666.666666666667) Update 42 at t=684 (target=683.333333333333) Update 43 at t=700 (target=700) Update 44 at t=717 (target=716.666666666666) Update 45 at t=734 (target=733.333333333333) Update 46 at t=750 (target=750) Update 47 at t=767 (target=766.666666666666) Update 48 at t=784 (target=783.333333333333) Update 49 at t=800 (target=800) Update 50 at t=817 (target=816.666666666666) Update 51 at t=834 (target=833.333333333333) Update 52 at t=850 (target=849.999999999999) Update 53 at t=867 (target=866.666666666666) Update 54 at t=884 (target=883.333333333333) Update 55 at t=900 (target=899.999999999999) Update 56 at t=917 (target=916.666666666666) Update 57 at t=934 (target=933.333333333333) Update 58 at t=950 (target=949.999999999999) Update 59 at t=967 (target=966.666666666666) Update 60 at t=984 (target=983.333333333332) Update 1 at t=0 (target=0) Update 2 at t=16 (target=16.6666666666667) Update 3 at t=33 (target=33.3333333333333) Update 4 at t=51 (target=50) Update 5 at t=67 (target=66.6666666666667) Update 6 at t=84 (target=83.3333333333333) Update 7 at t=101 (target=100) Update 8 at t=116 (target=116.666666666667) Update 9 at t=133 (target=133.333333333333) Update 10 at t=150 (target=150) Update 11 at t=167 (target=166.666666666667) Update 12 at t=183 (target=183.333333333333) Update 13 at t=199 (target=200) Update 14 at t=216 (target=216.666666666667) Update 15 at t=234 (target=233.333333333333) Update 16 at t=249 (target=250) Update 17 at t=267 (target=266.666666666667) Update 18 at t=284 (target=283.333333333333) Update 19 at t=301 (target=300) Update 20 at t=317 (target=316.666666666667) Update 21 at t=334 (target=333.333333333333) Update 22 at t=350 (target=350) Update 23 at t=367 (target=366.666666666667) Update 24 at t=384 (target=383.333333333333) Update 25 at t=401 (target=400) Update 26 at t=417 (target=416.666666666667) Update 27 at t=434 (target=433.333333333333) Update 28 at t=451 (target=450) Update 29 at t=467 (target=466.666666666667) Update 30 at t=484 (target=483.333333333334) Update 31 at t=501 (target=500) Update 32 at t=517 (target=516.666666666667) Update 33 at t=534 (target=533.333333333333) Update 34 at t=551 (target=550) Update 35 at t=567 (target=566.666666666667) Update 36 at t=584 (target=583.333333333333) Update 37 at t=601 (target=600) Update 38 at t=617 (target=616.666666666667) Update 39 at t=634 (target=633.333333333333) Update 40 at t=650 (target=650) Update 41 at t=667 (target=666.666666666667) Update 42 at t=684 (target=683.333333333333) Update 43 at t=700 (target=700) Update 44 at t=717 (target=716.666666666666) Update 45 at t=734 (target=733.333333333333) Update 46 at t=750 (target=750) Update 47 at t=767 (target=766.666666666666) Update 48 at t=784 (target=783.333333333333) Update 49 at t=800 (target=800) Update 50 at t=817 (target=816.666666666666) Update 51 at t=834 (target=833.333333333333) Update 52 at t=850 (target=849.999999999999) Update 53 at t=867 (target=866.666666666666) Update 54 at t=884 (target=883.333333333333) Update 55 at t=900 (target=899.999999999999) Update 56 at t=917 (target=916.666666666666) Update 57 at t=934 (target=933.333333333333) Update 58 at t=950 (target=949.999999999999) Update 59 at t=967 (target=966.666666666666) Update 60 at t=984 (target=983.333333333332) Loop done.