Вопрос

Я только что видел этот вопрос, где один из ответов указывает на то, что Система.Диагностика.Секундомер следует использовать только для диагностики производительности, а не в рабочем коде.

В таком случае, как лучше всего добиться точного времени в .NET?В настоящее время я нахожусь на ранних стадиях создания очень простого МИДИ секвенсор, использующий функцию MIDI-выхода НАудио.Я хотел бы иметь возможность отправлять MIDI-сообщения с выравниванием (скажем) 1/10 с как можно меньшим джиттером.Возможно ли это, или такие вещи, как переключение контекста, испортят мне день?

В настоящее время у меня есть код в консольном приложении, которое постоянно вызывает Stopwatch и вычисляет джиттер при генерации потока 1/16 нот со скоростью 150 ударов в минуту.В этой ситуации джиттер очень низкий.Однако я перенесу это в другую тему, поэтому не знаю, останется ли так.

Это было полезно?

Решение

Если вы не против P/Invoke, вы можете использовать QueryPerformanceCounter: http://www.eggheadcafe.com/articles/20021111.asp

Другие советы

Вы также можете использовать собственный потоковый MIDI API.Я не думаю, что это есть в NAudio, но вы можете посмотреть C# Midi Toolkit, чтобы узнать, поддерживает ли он его.В противном случае у вас есть два примера того, как использовать собственный MIDI API P/Invoke, и вы можете создать свой собственный...

Мультимедийный таймер Windows утверждает, что это позволяет «приложениям планировать события таймера с максимально возможным разрешением (или точностью) для аппаратной платформы».

Приложение, которое он использует в качестве примера, представляет собой MIDI-секвенсор.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top