Я пытаюсь перестроить старое приложение метронома, которое изначально было написано с использованием MFC в C++, написанное на .NET с использованием C#. Одна из проблем, с которыми я сталкиваюсь, заключается в том, что таймер достаточно «тикает».Получение точных тиков от таймера в C#
Например, если принять простой BPM (бит в минуту) 120, таймер должен указывать каждые 0,5 секунды (или 500 миллисекунд). Однако использование этого в качестве основы для тиков не совсем точно, так как .NET гарантирует, что ваш таймер не будет отмечен до истечения прошедшего времени.
В настоящее время, чтобы обойти это для того же самого примера 120 BPM, который использовался выше, я устанавливаю тики примерно на 100 миллисекунд и воспроизвожу только звук щелчка на каждом типе 5-го таймера. Это значительно улучшает точность, но если вы чувствуете себя немного взломанным.
Итак, что является лучшим способом получить точные тики? Я знаю, что доступно больше таймеров, чем таймер окон, который легко доступен в Visual Studio, но я не очень-то знаком с ними.
Но тогда вы можете быть уверены, что нить спит по крайней мере х millioseconds; планировщик потоков не подтверждает, что поток будет выполняться с точным количеством миллисекунд – Wilhelm 2009-07-18 22:32:28
Вправо. Я согласен с тем, что вы сказали о невозможности определить время следующего тика. То, что я говорю, заключается в том, что вы не хотите, чтобы выполнялся код события tick с предыдущего тика, когда наступает следующий тик. – 2009-07-20 13:51:26