public void Run() { int frames = 0; int previousTicks = 0; AudioMixer.StartMixer(44100, 0x800); // 1/5th a second audio buffer while (Running) { while (Events.Poll()) { ; } gui.Paint(); Video.Update(); if (++frames >= 3) { int ticks = Timer.TicksElapsed; if (ticks - previousTicks < 50) { System.Threading.Thread.Sleep(50 + previousTicks - ticks); } else if (ticks - previousTicks > 100) { previousTicks = ticks - 100; } previousTicks += 50; Video.WindowCaption = String.Format("{0} Time skew: {1}ms", WindowCaption, previousTicks - ticks); frames = 0; } } AudioMixer.CloseMixer(); }