public void InvokeSkipped(float time) { MusicController.Seek(time); OnSkipped?.Invoke(time); }
private void Loop() { _nextWakeUpTickTime = Stopwatch.GetTimestamp(); try { while (true) { _nextWakeUpTickTime += _cycleTimeInTicks; while (true) { long ticks = _nextWakeUpTickTime - Stopwatch.GetTimestamp(); if (ticks <= 0L) { break; } long diff = (ticks * 1000) / Stopwatch.Frequency; // cycle in milliseconds if (diff >= 100) { Thread.Sleep(20); } else if (diff >= 40) { Thread.Sleep(10); } else if (diff >= 25) { Thread.Sleep(2); } else if (diff >= 15) { Thread.Sleep(1); } else if (diff >= 5) { Thread.SpinWait(200); } else if (diff > 1) { Thread.SpinWait(100); } else { Thread.SpinWait(10); } } long lDelay = Stopwatch.GetTimestamp() - _nextWakeUpTickTime; if (lDelay < _MaxDelayInTicks) { OnTimer?.Invoke(null, null); } else { OnSkipped?.Invoke(null, null); } } } catch (ThreadInterruptedException) { } catch (Exception) { Console.WriteLine("Exiting timer thread."); } OnStoped?.Invoke(null, null); }