fork 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. int freq = 60;
  29. int maxSlip = 100; // give up if we're more than 0.1s late
  30.  
  31. for (int i = 0; i < 1*freq; i++)
  32. {
  33. long currentTime = sw.ElapsedMilliseconds;
  34. long targetTime = (1000 * i) / freq;
  35. if (currentTime < targetTime)
  36. {
  37. Thread.Sleep((int)(targetTime - currentTime));
  38. }
  39. else if (currentTime > targetTime + maxSlip)
  40. {
  41. i = (int)( (double)currentTime / freq + 0.5 ); // we're too late, give up
  42. }
  43.  
  44. Console.WriteLine("Update " + i + " at t=" + sw.ElapsedMilliseconds + " (target=" + targetTime + ")");
  45. }
  46. }
  47. }
  48. }
Success #stdin #stdout 0.03s 34800KB
stdin
Standard input is empty
stdout
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.