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(); int freq = 60; int maxSlip = 100; // give up if we're more than 0.1s late for (int i = 0; i < 1*freq; i++) { long currentTime = sw.ElapsedMilliseconds; long targetTime = (1000 * i) / freq; if (currentTime < targetTime) { Thread.Sleep((int)(targetTime - currentTime)); } else if (currentTime > targetTime + maxSlip) { i = (int)( (double)currentTime / freq + 0.5 ); // we're too late, give up } Console.WriteLine("Update " + i + " at t=" + sw.ElapsedMilliseconds + " (target=" + targetTime + ")"); } } } }
Standard input is empty
Update 0 at t=0 (target=0) Update 1 at t=22 (target=16) Update 2 at t=34 (target=33) Update 3 at t=51 (target=50) Update 4 at t=67 (target=66) Update 5 at t=84 (target=83) Update 6 at t=101 (target=100) Update 7 at t=117 (target=116) Update 8 at t=134 (target=133) Update 9 at t=151 (target=150) Update 10 at t=167 (target=166) Update 11 at t=184 (target=183) Update 12 at t=201 (target=200) Update 13 at t=217 (target=216) Update 14 at t=234 (target=233) Update 15 at t=251 (target=250) Update 16 at t=267 (target=266) Update 17 at t=284 (target=283) Update 18 at t=301 (target=300) Update 19 at t=317 (target=316) Update 20 at t=334 (target=333) Update 21 at t=351 (target=350) Update 22 at t=367 (target=366) Update 23 at t=384 (target=383) Update 24 at t=401 (target=400) Update 25 at t=417 (target=416) Update 26 at t=434 (target=433) Update 27 at t=451 (target=450) Update 28 at t=467 (target=466) Update 29 at t=484 (target=483) Update 30 at t=501 (target=500) Update 31 at t=517 (target=516) Update 32 at t=534 (target=533) Update 33 at t=551 (target=550) Update 34 at t=567 (target=566) Update 35 at t=584 (target=583) Update 36 at t=601 (target=600) Update 37 at t=617 (target=616) Update 38 at t=634 (target=633) Update 39 at t=651 (target=650) Update 40 at t=667 (target=666) Update 41 at t=684 (target=683) Update 42 at t=701 (target=700) Update 43 at t=717 (target=716) Update 44 at t=734 (target=733) Update 45 at t=751 (target=750) Update 46 at t=767 (target=766) Update 47 at t=784 (target=783) Update 48 at t=801 (target=800) Update 49 at t=817 (target=816) Update 50 at t=834 (target=833) Update 51 at t=851 (target=850) Update 52 at t=867 (target=866) Update 53 at t=884 (target=883) Update 54 at t=901 (target=900) Update 55 at t=917 (target=916) Update 56 at t=934 (target=933) Update 57 at t=951 (target=950) Update 58 at t=967 (target=966) Update 59 at t=984 (target=983) Update 0 at t=0 (target=0) Update 1 at t=16 (target=16) Update 2 at t=34 (target=33) Update 3 at t=51 (target=50) Update 4 at t=67 (target=66) Update 5 at t=84 (target=83) Update 6 at t=101 (target=100) Update 7 at t=117 (target=116) Update 8 at t=134 (target=133) Update 9 at t=151 (target=150) Update 10 at t=167 (target=166) Update 11 at t=184 (target=183) Update 12 at t=201 (target=200) Update 13 at t=217 (target=216) Update 14 at t=234 (target=233) Update 15 at t=251 (target=250) Update 16 at t=267 (target=266) Update 17 at t=284 (target=283) Update 18 at t=301 (target=300) Update 19 at t=317 (target=316) Update 20 at t=334 (target=333) Update 21 at t=351 (target=350) Update 22 at t=367 (target=366) Update 23 at t=384 (target=383) Update 24 at t=401 (target=400) Update 25 at t=417 (target=416) Update 26 at t=434 (target=433) Update 27 at t=451 (target=450) Update 28 at t=467 (target=466) Update 29 at t=484 (target=483) Update 30 at t=501 (target=500) Update 31 at t=517 (target=516) Update 32 at t=534 (target=533) Update 33 at t=551 (target=550) Update 34 at t=567 (target=566) Update 35 at t=584 (target=583) Update 36 at t=601 (target=600) Update 37 at t=617 (target=616) Update 38 at t=634 (target=633) Update 39 at t=651 (target=650) Update 40 at t=667 (target=666) Update 41 at t=684 (target=683) Update 42 at t=701 (target=700) Update 43 at t=717 (target=716) Update 44 at t=734 (target=733) Update 45 at t=751 (target=750) Update 46 at t=767 (target=766) Update 47 at t=784 (target=783) Update 48 at t=801 (target=800) Update 49 at t=817 (target=816) Update 50 at t=834 (target=833) Update 51 at t=851 (target=850) Update 52 at t=867 (target=866) Update 53 at t=884 (target=883) Update 54 at t=901 (target=900) Update 55 at t=917 (target=916) Update 56 at t=934 (target=933) Update 57 at t=951 (target=950) Update 58 at t=967 (target=966) Update 59 at t=984 (target=983) Update 0 at t=0 (target=0) Update 1 at t=16 (target=16) Update 2 at t=34 (target=33) Update 3 at t=52 (target=50) Update 4 at t=66 (target=66) Update 5 at t=84 (target=83) Update 6 at t=101 (target=100) Update 7 at t=117 (target=116) Update 8 at t=134 (target=133) Update 9 at t=151 (target=150) Update 10 at t=167 (target=166) Update 11 at t=183 (target=183) Update 12 at t=201 (target=200) Update 13 at t=217 (target=216) Update 14 at t=234 (target=233) Update 15 at t=251 (target=250) Update 16 at t=267 (target=266) Update 17 at t=284 (target=283) Update 18 at t=301 (target=300) Update 19 at t=317 (target=316) Update 20 at t=334 (target=333) Update 21 at t=351 (target=350) Update 22 at t=367 (target=366) Update 23 at t=384 (target=383) Update 24 at t=401 (target=400) Update 25 at t=417 (target=416) Update 26 at t=434 (target=433) Update 27 at t=451 (target=450) Update 28 at t=467 (target=466) Update 29 at t=484 (target=483) Update 30 at t=501 (target=500) Update 31 at t=517 (target=516) Update 32 at t=534 (target=533) Update 33 at t=551 (target=550) Update 34 at t=567 (target=566) Update 35 at t=584 (target=583) Update 36 at t=601 (target=600) Update 37 at t=617 (target=616) Update 38 at t=634 (target=633) Update 39 at t=651 (target=650) Update 40 at t=667 (target=666) Update 41 at t=684 (target=683) Update 42 at t=701 (target=700) Update 43 at t=717 (target=716) Update 44 at t=734 (target=733) Update 45 at t=751 (target=750) Update 46 at t=767 (target=766) Update 47 at t=784 (target=783) Update 48 at t=801 (target=800) Update 49 at t=817 (target=816) Update 50 at t=834 (target=833) Update 51 at t=851 (target=850) Update 52 at t=867 (target=866) Update 53 at t=884 (target=883) Update 54 at t=901 (target=900) Update 55 at t=917 (target=916) Update 56 at t=934 (target=933) Update 57 at t=951 (target=950) Update 58 at t=967 (target=966) Update 59 at t=984 (target=983) Update 0 at t=0 (target=0) Update 1 at t=16 (target=16) Update 2 at t=33 (target=33) Update 3 at t=50 (target=50) Update 4 at t=66 (target=66) Update 5 at t=83 (target=83) Update 6 at t=101 (target=100) Update 7 at t=117 (target=116) Update 8 at t=134 (target=133) Update 9 at t=151 (target=150) Update 10 at t=167 (target=166) Update 11 at t=184 (target=183) Update 12 at t=201 (target=200) Update 13 at t=217 (target=216) Update 14 at t=234 (target=233) Update 15 at t=251 (target=250) Update 16 at t=267 (target=266) Update 17 at t=284 (target=283) Update 18 at t=301 (target=300) Update 19 at t=317 (target=316) Update 20 at t=334 (target=333) Update 21 at t=351 (target=350) Update 22 at t=367 (target=366) Update 23 at t=384 (target=383) Update 24 at t=401 (target=400) Update 25 at t=417 (target=416) Update 26 at t=434 (target=433) Update 27 at t=451 (target=450) Update 28 at t=467 (target=466) Update 29 at t=484 (target=483) Update 30 at t=501 (target=500) Update 31 at t=517 (target=516) Update 32 at t=534 (target=533) Update 33 at t=551 (target=550) Update 34 at t=567 (target=566) Update 35 at t=584 (target=583) Update 36 at t=601 (target=600) Update 37 at t=617 (target=616) Update 38 at t=634 (target=633) Update 39 at t=651 (target=650) Update 40 at t=667 (target=666) Update 41 at t=684 (target=683) Update 42 at t=701 (target=700) Update 43 at t=717 (target=716) Update 44 at t=734 (target=733) Update 45 at t=751 (target=750) Update 46 at t=767 (target=766) Update 47 at t=784 (target=783) Update 48 at t=801 (target=800) Update 49 at t=817 (target=816) Update 50 at t=834 (target=833) Update 51 at t=851 (target=850) Update 52 at t=867 (target=866) Update 53 at t=884 (target=883) Update 54 at t=901 (target=900) Update 55 at t=917 (target=916) Update 56 at t=934 (target=933) Update 57 at t=951 (target=950) Update 58 at t=967 (target=966) Update 59 at t=984 (target=983) Loop done.