using System.Diagnostics;
private static readonly long start = Stopwatch.GetTimestamp();
private static readonly double frequency = 1.0 / (double)Stopwatch.Frequency;
public static double Time
long diff = Stopwatch.GetTimestamp() - start;
return (double)diff * frequency;
public event Action OnFixedUpdate;
private double updateFrequency;
private double lastUpdate;
public Clock(double updateFrequency)
this.updateFrequency = updateFrequency;
this.lastUpdate = Clock.Time;
while ((this.lastUpdate + this.updateFrequency) < Clock.Time)
if (this.OnFixedUpdate != null)
this.OnFixedUpdate.Invoke();
this.lastUpdate += this.updateFrequency;
private static void DoSlow()
Console.WriteLine("Slow - {0}", Clock.Time);
private static void DoFast()
Console.WriteLine("Fast - {0}", Clock.Time);
public static void Main()
Clock fastClock = new Clock(0.02f);
Clock slowClock = new Clock(1.0f);
fastClock.OnFixedUpdate += DoFast;
slowClock.OnFixedUpdate += DoSlow;
while(t + 500 > Clock.Time)