mirror of
https://github.com/aaru-dps/RedBookPlayer.git
synced 2025-12-16 19:24:41 +00:00
Remove unneeded code
This commit is contained in:
@@ -1,116 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Threading;
|
|
||||||
|
|
||||||
namespace RedBookPlayer
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Recurring timer wrapper with a high degree of accuracy
|
|
||||||
/// </summary>
|
|
||||||
public class HiResTimer
|
|
||||||
{
|
|
||||||
static readonly float tickFrequency = 1000f / Stopwatch.Frequency;
|
|
||||||
|
|
||||||
volatile float _interval;
|
|
||||||
volatile bool _isRunning;
|
|
||||||
|
|
||||||
public HiResTimer() : this(1f) {}
|
|
||||||
|
|
||||||
public HiResTimer(float interval)
|
|
||||||
{
|
|
||||||
if(interval < 0f ||
|
|
||||||
float.IsNaN(interval))
|
|
||||||
throw new ArgumentOutOfRangeException(nameof(interval));
|
|
||||||
|
|
||||||
_interval = interval;
|
|
||||||
}
|
|
||||||
|
|
||||||
public float Interval
|
|
||||||
{
|
|
||||||
get => _interval;
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if(value < 0f ||
|
|
||||||
float.IsNaN(value))
|
|
||||||
throw new ArgumentOutOfRangeException(nameof(value));
|
|
||||||
|
|
||||||
_interval = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool Enabled
|
|
||||||
{
|
|
||||||
get => _isRunning;
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if(value)
|
|
||||||
Start();
|
|
||||||
else
|
|
||||||
Stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public event EventHandler<HiResTimerElapsedEventArgs> Elapsed;
|
|
||||||
|
|
||||||
public void Start()
|
|
||||||
{
|
|
||||||
if(_isRunning)
|
|
||||||
return;
|
|
||||||
|
|
||||||
_isRunning = true;
|
|
||||||
var thread = new Thread(ExecuteTimer);
|
|
||||||
thread.Priority = ThreadPriority.Highest;
|
|
||||||
thread.Start();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Stop() => _isRunning = false;
|
|
||||||
|
|
||||||
void ExecuteTimer()
|
|
||||||
{
|
|
||||||
float nextTrigger = 0f;
|
|
||||||
|
|
||||||
var stopwatch = new Stopwatch();
|
|
||||||
stopwatch.Start();
|
|
||||||
|
|
||||||
while(_isRunning)
|
|
||||||
{
|
|
||||||
nextTrigger += _interval;
|
|
||||||
float elapsed;
|
|
||||||
|
|
||||||
while(true)
|
|
||||||
{
|
|
||||||
elapsed = ElapsedHiRes(stopwatch);
|
|
||||||
float diff = nextTrigger - elapsed;
|
|
||||||
|
|
||||||
if(diff <= 0f)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if(diff < 1f)
|
|
||||||
Thread.SpinWait(10);
|
|
||||||
else if(diff < 5f)
|
|
||||||
Thread.SpinWait(100);
|
|
||||||
else if(diff < 15f)
|
|
||||||
Thread.Sleep(1);
|
|
||||||
else
|
|
||||||
Thread.Sleep(10);
|
|
||||||
|
|
||||||
if(!_isRunning)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
float delay = elapsed - nextTrigger;
|
|
||||||
Elapsed?.Invoke(this, new HiResTimerElapsedEventArgs(delay));
|
|
||||||
|
|
||||||
if(!(stopwatch.Elapsed.TotalHours >= 1d))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
stopwatch.Restart();
|
|
||||||
nextTrigger = 0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
stopwatch.Stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
static float ElapsedHiRes(Stopwatch stopwatch) => stopwatch.ElapsedTicks * tickFrequency;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
using System;
|
|
||||||
|
|
||||||
namespace RedBookPlayer
|
|
||||||
{
|
|
||||||
public class HiResTimerElapsedEventArgs : EventArgs
|
|
||||||
{
|
|
||||||
internal HiResTimerElapsedEventArgs(float delay) => Delay = delay;
|
|
||||||
|
|
||||||
public float Delay { get; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user