Code: Select all
static void HandleTickBehaviour()
{
Stopwatch tickDuration = new(); //time tick starts
while (true)
{
tickDuration.Restart();
Tick.Invoke(ElapsedTicks); // invoke all tick event watchers
Profiler.CalcTime.Add(tickDuration.ElapsedMilliseconds); // how long it took for all tick event to run
long targetThreadDelay = (int)(Math.Max(25 - Math.Max(_deltaTime - 25, 0), 0) / 1000d * Stopwatch.Frequency); // how long to wait for next tick (25ms - delta time)
while (true) if (tickDuration.ElapsedTicks >= targetThreadDelay) break;
_deltaTime = tickDuration.ElapsedMilliseconds;
Profiler.TickTime.Add(_deltaTime);
ElapsedTicks++;
}
}
internal static void HandleConsoleRender()
{
Stopwatch frameDuration = new();
while (true)
{
frameDuration.Restart();
RenderConsole();
while (true) if (frameDuration.ElapsedTicks >= displayWindowsTickInterval) break;
Profiler.RenderTime.Add(frameDuration.ElapsedTicks);
}
}
Die anderen Annäherungen, die ich implementieren kann, werden das Thread verwendet. Einfach zu viel und sogar zu versuchen, dafür zu berücksichtigen, dass Aktualisierungen unvorhersehbar auftreten.>