fork(1) download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Runtime.InteropServices;
  6. using System.Threading;
  7.  
  8. namespace Fixed_Timed_Step
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. for (int i = 0; i < 4; i++)
  15. {
  16. FixedLoop();
  17. }
  18.  
  19. Console.WriteLine("Loop done.");
  20. Console.ReadKey();
  21. }
  22.  
  23. static void FixedLoop()
  24. {
  25. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  26. sw.Start();
  27.  
  28. double dt = 1000.0 / 60;
  29. double targetTime = 0;
  30. int i = 1;
  31.  
  32. while (targetTime + dt/2 < 1000)
  33. {
  34. long currentTime = sw.ElapsedMilliseconds;
  35. if (currentTime < targetTime)
  36. {
  37. Thread.Sleep((int) (targetTime - currentTime));
  38. }
  39. else if (currentTime > targetTime + 100)
  40. {
  41. targetTime = currentTime; // we're too late, give up
  42. }
  43.  
  44. Console.WriteLine("Update " + i + " at t=" + sw.ElapsedMilliseconds + " (target=" + targetTime + ")");
  45. i++;
  46. targetTime += dt;
  47. }
  48. }
  49. }
  50. }
Success #stdin #stdout 0.04s 34016KB
stdin
Standard input is empty
stdout
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.