Ich mache einfache Stroboskop am Computer angeschlossen. Ich habe Schleife wie folgt aus:C# Stroboskop, Thread.Sleep
double SleepTime = 1000/Hz;
while()
{
BlinkAll();
Thread.Sleep((int)SleepTime);
}
Aber das ist sehr ungenau. Wenn Hz = 666 als Sleeptime = 1,5 und (int) Sleeptime = 1
bedeutet dies, dass bei der Ausgabe erhalte ich 1000Hz nicht 666Hz Dieser große diffrence ist.
Wie behebt man das?
P.S.
Dieses Beispiel ist immer noch nicht zu genau. Es ist besser, aber nicht gut in irgendeiner Weise:
double SleepTime = 1000/Hz;
Thread.Sleep((int)SleepTime + 0.5)
'Threading.Sleep' ungenau bis zu 15 ms ist, soweit ich weiß, und sie erinnern. Es ist nicht für eine solche Aufgabe verwendbar, nicht einmal genau. – Bobby
Eigentlich ist die Präzision noch nicht einmal annähernd. Obwohl Sie eine Granularität von Millisekunden angeben können, hat der Interrupt, der verwandt wird, eine niedrigere Häufigkeit normalerweise um ungefähr 10 Millisekunden (die sich zwischen verschiedenen Betriebssystemversionen unterscheiden). Das bedeutet, dass Sie tatsächlich etwas wie 100 Hz anstatt 1000 Hz bekommen. – Guffa
Vielleicht möchten Sie sich diese Frage ansehen: [Wie genau ist Thread.Sleep()] (http://stackoverflow.com/questions/1303667/how-accurate-is-thread-sleeptimespan) – Bobby