Точное время в .NET - PullRequest
       20

Точное время в .NET

10 голосов
/ 28 апреля 2009

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

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

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

Ответы [ 3 ]

6 голосов
/ 28 апреля 2009

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

1 голос
/ 08 марта 2010

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

0 голосов
/ 18 июня 2015

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

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

...