Voici un code simple qui utilise Thread.Sleep pour suspendre l'exécution, et Stopwatch.ElapsedMilliseconds pour trouver combien de temps le thread a réellement dormi.Comportement étrange avec Thread.Sleep dans VB
Dim sw As New Stopwatch()
Dim elapsed_ms As Integer = 0
sw.Start()
While True
Threading.Thread.Sleep(10)
elapsed_ms = CInt(sw.ElapsedMilliseconds)
Debug.WriteLine("Elapsed: " & elapsed_ms & " ms")
sw.Restart()
End While
Ma question est: de temps en temps, l'impression de débogage dit que 0 ms se sont écoulées. Comment est-ce possible? Je suis conscient que Thread.Sleep (10) n'est pas précis, et qu'il dort normalement pendant plus de 10 ms, mais je pensais qu'il était garanti de dormir au moins 10 ms.
Vérifiez 'Frequency' et' IsHighResolution' sur la 'StopWatch' pour vérifier que vous avez réellement un' StopWatch' avec une minuterie haute résolution dessus. –
La fréquence est 2531513, ce qui (je crois) signifie qu'il devrait être précis à ~ une demi-microseconde. Dans les deux cas, le champ IsHighResolution lit True. – Cobalt
J'ai juste essayé de reproduire ceci en créant un nouveau projet de console vide, et en collant dans votre code. Je ne vois pas de lignes de 0 ms, mais je vois beaucoup de lignes de 9 ms, ce qui ne devrait pas vraiment se produire d'après ce que je comprends. Quel OS utilisez-vous, et est-ce l'intégralité de votre code? –