Je fais un stroboscope simple attaché à l'ordinateur. Je boucle Comme ça:Stroboscope C#, Thread.Sleep
double SleepTime = 1000/Hz;
while()
{
BlinkAll();
Thread.Sleep((int)SleepTime);
}
Mais cela est très inexact. Si Hz = 666 que SleepTime = 1,5 et (int) SleepTime = 1
cela signifie que la sortie je reçois 1000Hz pas 666Hz C'est grand diffrence.
Comment résoudre ce problème?
P.S.
Cet exemple n'est toujours pas précis. Il est préférable, mais pas bon en aucune façon:
double SleepTime = 1000/Hz;
Thread.Sleep((int)SleepTime + 0.5)
'Threading.Sleep' est inexact jusqu'à 15ms, pour autant que je sache, et souvenez-vous. Ce n'est pas utilisable pour une telle tâche, même pas de près. – Bobby
En fait, la précision n'est même pas proche de ça. Bien que vous puissiez spécifier une granularité de millisecondes, l'interruption utilisée a une fréquence inférieure, généralement de l'ordre de 10 millisecondes (différant entre différentes versions de système d'exploitation). Cela signifie que vous obtenez quelque chose comme 100 Hz plutôt que 1000 Hz. – Guffa
Vous voudrez peut-être jeter un oeil à cette question: [Quelle est la précision de Thread.Sleep()] (http://stackoverflow.com/questions/1303667/how-accurate-is-thread-sleeptimespan) – Bobby