Próbuję odbudować starą aplikację metronomu, która została oryginalnie napisana przy użyciu MFC w C++ i napisana w .NET przy użyciu C#. Jednym z problemów, na które napotykam, jest uzyskanie odliczającego czasu, aby "zaznaczyć" wystarczająco dokładnie.Uzyskiwanie dokładnych odgłosów z timera w C#
Na przykład, zakładając łatwy BPM (uderzeń na minutę) o wartości 120, timer powinien odhaczać co 0,5 sekundy (lub 500 milisekund). Używanie tego jako podstawy dla tyknięć nie jest jednak do końca dokładne, ponieważ .NET gwarantuje tylko, że czasomierz nie zaznaczy się przed upływem czasu.
Obecnie, aby obejść ten problem z tego samego przykładu 120 BPM używanego powyżej, ustawiam tyknięcia na około 100 milisekund i odtwarzam dźwięk kliknięcia na każdym piątym teście zegara. To znacznie poprawia dokładność, ale jeśli wydaje się trochę hackem.
Jaki jest najlepszy sposób na uzyskanie dokładnych odcisków? Wiem, że dostępnych jest więcej timerów niż timery formularzy systemu Windows, które są łatwo dostępne w Visual Studio, ale nie jestem do końca obeznany z nimi.
Ale wtedy można mieć tylko pewność, że wątek śpi co najmniej X millioseconds; program planujący wątek nie poświadcza, że wątek będzie działał z dokładnością do miliona metrów. – Wilhelm
Prawa. Zgadzam się z tym, co powiedziałeś, że nie potrafisz określić czasu następnego tyknięcia. Celem tego, co mówię, jest to, że nie chcesz wykonywać kodu zdarzenia od poprzedniego tiku, gdy pojawi się następny tik. –