private void ClockLoop() { if (ClockTick == null) { throw new InvalidOperationException("Can not start clock with no tick listeners"); } timer.Start(); ticksForNextClock = timer.ElapsedTicks + ticksPerClock; ticksForNextOneSecond = timer.ElapsedTicks + ticksPerOneSecond; while (run) { long currentTicks = timer.ElapsedTicks; if (currentTicks < ticksForNextClock) { continue; } totalTicks++; ticksForNextClock += ticksPerClock; ClockTick.Invoke(); if (currentTicks >= ticksForNextOneSecond) { ticksForNextOneSecond += ticksPerOneSecond; OneSecondTick?.Invoke(); } } timer.Stop(); }
internal static void InvokeOneSecondTick() { OneSecondTick.Invoke(null, EventArgs.Empty); }