1
0
mirror of https://github.com/DarthAffe/RGB.NET.git synced 2025-12-13 10:08:31 +00:00

Fixed wrong update-loop

This commit is contained in:
Darth Affe 2018-03-25 15:49:18 +02:00
parent 87211dab69
commit 3965bfb9a0
3 changed files with 11 additions and 9 deletions

View File

@ -23,7 +23,7 @@ namespace RGB.NET.Core
/// </summary> /// </summary>
public static RGBSurface Instance { get; } = new RGBSurface(); public static RGBSurface Instance { get; } = new RGBSurface();
private long _lastUpdateTicks; private Stopwatch _deltaTimeCounter;
private IList<IRGBDeviceProvider> _deviceProvider = new List<IRGBDeviceProvider>(); private IList<IRGBDeviceProvider> _deviceProvider = new List<IRGBDeviceProvider>();
private IList<IRGBDevice> _devices = new List<IRGBDevice>(); private IList<IRGBDevice> _devices = new List<IRGBDevice>();
@ -60,7 +60,8 @@ namespace RGB.NET.Core
/// </summary> /// </summary>
private RGBSurface() private RGBSurface()
{ {
_lastUpdateTicks = Stopwatch.GetTimestamp(); _deltaTimeCounter = Stopwatch.StartNew();
_sleepCounter = new Stopwatch();
CheckUpdateLoop(); CheckUpdateLoop();
} }

View File

@ -1,5 +1,4 @@
using System; using System;
using System.Diagnostics;
namespace RGB.NET.Core namespace RGB.NET.Core
{ {
@ -83,9 +82,9 @@ namespace RGB.NET.Core
{ {
try try
{ {
long lastUpdateTicks = _lastUpdateTicks; double deltaTime = _deltaTimeCounter.Elapsed.TotalSeconds;
_lastUpdateTicks = Stopwatch.GetTimestamp(); _deltaTimeCounter.Restart();
Updating?.Invoke(new UpdatingEventArgs((_lastUpdateTicks - lastUpdateTicks) / 10000000.0)); Updating?.Invoke(new UpdatingEventArgs(deltaTime));
} }
catch { /* Well ... that's not my fault */ } catch { /* Well ... that's not my fault */ }
} }

View File

@ -12,6 +12,7 @@ namespace RGB.NET.Core
private CancellationTokenSource _updateTokenSource; private CancellationTokenSource _updateTokenSource;
private CancellationToken _updateToken; private CancellationToken _updateToken;
private Task _updateTask; private Task _updateTask;
private Stopwatch _sleepCounter;
// ReSharper disable MemberCanBePrivate.Global // ReSharper disable MemberCanBePrivate.Global
@ -87,12 +88,13 @@ namespace RGB.NET.Core
{ {
while (!_updateToken.IsCancellationRequested) while (!_updateToken.IsCancellationRequested)
{ {
long preUpdateTicks = Stopwatch.GetTimestamp(); _sleepCounter.Restart();
Update(); Update();
LastUpdateTime = ((Stopwatch.GetTimestamp() - preUpdateTicks) / 10000.0); _sleepCounter.Stop();
int sleep = (int)((UpdateFrequency * 1000.0) - LastUpdateTime); LastUpdateTime = _sleepCounter.Elapsed.TotalSeconds;
int sleep = (int)((UpdateFrequency * 1000.0) - _sleepCounter.ElapsedMilliseconds);
if (sleep > 0) if (sleep > 0)
Thread.Sleep(sleep); Thread.Sleep(sleep);
} }