Pergunta

Eu vi este pergunta, onde uma das respostas indica que System.Diagnostics.Stopwatch só deve ser utilizado para o diagnóstico de desempenho e não no código de produção.

Nesse caso, qual seria a melhor maneira de obter uma precisão de tempo em .NET? Eu estou atualmente nos estágios iniciais de construção de uma forma muito simples MIDI sequenciador usando o MIDI-out funcionalidade de NAudio . Eu gostaria de ser capaz de enviar mensagens MIDI para fora alinhado com (digamos) 1 / 10s com tão pouco jitter possível. É isso possível, ou será coisas como ruína meu dia de comutação de contexto?

Actualmente tenho algum código em um aplicativo de console que chama continuamente Stopwatch e calcula o jitter ao gerar um fluxo de 1 / 16th-notes em 150bpm. O jitter é muito baixa nesta situação. No entanto, vou me mudar isto fora para outro segmento, então eu não sei se isso continuará a ser o caso.

Foi útil?

Solução

Se você não se importa P / Invoke, você pode usar QueryPerformanceCounter: http: // www .eggheadcafe.com / artigos / 20021111.asp

Outras dicas

Você também pode usar o nativo de streaming API MIDI. Eu não acho que é em NAudio mas você pode olhar para o C # Midi Toolkit para ver se que um suporta. Caso contrário, você tem dois exemplos de como fazer nativa MIDI API P / Invoke e pode lançar seu próprio ...

o Windows multimedia temporizador estados que ele permite "aplicações para eventos programação do temporizador com a maior resolução (ou precisão) possível para a plataforma de hardware."

O aplicativo usa como exemplo é um sequenciador MIDI.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top