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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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