Я пытаюсь создать метод на C#, с помощью которого я могу многократно выполнять действие (в моем конкретном приложении он отправляет UDP-пакет) с заданной скоростью. Я знаю, что неточность таймера в C# будет препятствовать тому, чтобы результат был точно на целевой скорости, но лучшее усилие достаточно хорошее. Однако при более высоких скоростях время, похоже, полностью отключается.C# Сроки неточности скорости синхронизации
while (!token.IsCancellationRequested)
{
stopwatch.Restart();
Thread.Sleep(5); // Simulate process
int processTime = (int)stopwatch.ElapsedMilliseconds;
int waitTime = taskInterval - processTime;
Task.Delay(Math.Max(0, waitTime)).Wait();
}
См here для полного приложения Пример консоли.
При запуске выход FPS этого тестового приложения показывает около 44-46 Гц для цели 60 Гц. Однако при более низких скоростях (например, 20 Гц) скорость выхода намного ближе к цели. Я не понимаю, почему это так. В чем проблема с моим кодом?
Вы получаете отрицательные значения 'waitTime'? Если это так, то вы не можете обрабатывать достаточное количество запросов в секунду. –
Кстати, пожалуйста, напишите пример кода в вопросе. Попробуйте прийти с минимальным примером. –
Нет, при работе с целевой скоростью 60 Гц значения myTimeTime равны 10-11 мс. И это самый минимальный пример, который может продемонстрировать проблему. – impsnldavid