2010-10-01 5 views
1

Comment puis-je faire Thread.Sleep (10.4166667) ;? OK, je vois maintenant que le sommeil n'est pas le chemin à parcourir. Donc, j'utilise Timer mais la minuterie est également en ms mis j'ai besoin de plus précis Y at-il une minuterie avec une précision de la nanoseconde?Plus précis Thread.Sleep

+1

Le paramètre de veille est en millisecondes. Pourquoi avez-vous besoin d'une précision supérieure à 1 ms? –

+1

Vous ne pouvez pas compter sur le système pour dormir exactement pendant le temps que vous spécifiez. Il ne peut être aussi précis que le système sous-jacent (qui pourrait être Windows, Mac et Linux actuellement). L'essentiel de cela est, que votre application devrait être capable de travailler même si elle dort pendant une heure au lieu d'une seconde, etc. (ne se produira pas dans la pratique - mais néanmoins) –

+3

Et la résolution est 15ms (tops) –

Répondre

1

Veuillez noter que l'argument est en millisecondes, donc 10 est 10 millisecondes. Êtes-vous sûr de vouloir 10.41 etc millisecondes? Si vous voulez 10,41 secondes, alors vous pouvez utiliser 10416.

4

Donc vous voulez que votre fil de sommeil pour cette heure et ensuite reprendre? Oublie ça. Ce paramètre indique au système de réactiver le thread après au moins ce nombre de millisecondes. Au moins. Et après la reprise, le fil pourrait être de nouveau mis en sommeil en un clin d'œil. C'est comme ça que fonctionnent les systèmes d'exploitation et vous ne pouvez pas le contrôler.

3

Veuillez noter que Thread.Sleep dort aussi longtemps que vous le dites (même pas précisément), quel que soit le temps d'exécution du code avant ou après.

Votre question semble impliquer que vous voulez que du code soit exécuté à certains intervalles, car un temps précis semble avoir de l'importance. Ainsi, vous pourriez préférer un Timer.

1

L'entrée à Thread.Sleep est le nombre de millisecondes pour lesquelles le thread est bloqué. Après cela, il sera exécutable, mais vous n'avez aucune influence sur le moment où il est réellement planifié. C'est à dire. en théorie, le thread pourrait attendre indéfiniment avant de reprendre l'exécution.

Il est rarement logique de compter sur un nombre spécifique de millisecondes ici. Si vous essayez de synchroniser le travail entre deux threads, il y a better options plutôt que Sleep.

3

Pour un sommeil aussi précis, vous devez utiliser un système d'exploitation en temps réel et vous aurez probablement besoin de matériel spécialisé. L'intégrité RTOS prétend répondre aux interruptions en nanosecondes, comme d'autres.

Cela ne se produira pas avec C# ou tout type d'appel de haut niveau de sommeil.

Questions connexes