Linux совместимый .NET 8.0 Высокая точность фиксированного таймераC#

Место общения программистов C#
Anonymous
Linux совместимый .NET 8.0 Высокая точность фиксированного таймера

Сообщение Anonymous »

Я пытался реализовать более высокий таймер точности в моем проекте C# Raylib Game для работы с фиксированными промежутками независимо от основной петли рисования игры. Моя текущая реализация использует System.timers.timer , но это слишком неточно для моего использования, поскольку она имеет тенденцию сильно колебаться:

Код: Выделить всё

using System.Diagnostics;
using System.Timers;
namespace Engine
{
partial class Game
{
/*For calculating tick delta*/
static public double TickDelta;
static private double SecondTick;
static private Stopwatch? TickWatch;
/*For calculating tick delta*/

private static readonly System.Timers.Timer GameTick = new(40);
public static void InitTick()
{

GameTick.Elapsed += Tick;
GameTick.Start();
TickWatch = new Stopwatch();
TickWatch.Start();
}
public static void TerminateTick()
{
GameTick.Stop();
}

public static void Tick(object? sender, ElapsedEventArgs e)
{
TimeSpan ts = TickWatch!.Elapsed;
double ft = ts.TotalMilliseconds;
TickDelta = ft - SecondTick;
SecondTick = ts.TotalMilliseconds;
}
}
}
При измерении промежутка времени с помощью system.diagnostics.stopwatch интервал, кажется, колеблется +-~ 15 мс. Я нашел эту библиотеку таймера на Nuget, которая сначала выглядела очень многообещающе, но я не вижу никаких версий .NET, которые поддерживают Linux на вкладке «Frameworks». И, конечно же, я получаю ошибки для отсутствия winmm.dll в моей системе при попытке интегрировать эту библиотеку.
Есть ли другие библиотеки, которые, как известно, работают/поддерживаются на Linux .net 8.0? Или есть другие реализации таймера с обратными вызовами событий, которые полагаются только на системные библиотеки?

Подробнее здесь: https://stackoverflow.com/questions/784 ... ixed-timer

Вернуться в «C#»