Comment suspendre un thread pendant 1 ms?

J’ai besoin de prety chose simple

while (true) { DoJob(); // wait 1 ms } 

Devrais-je simplement utiliser Thread.Sleep(1) ? Je ne suis pas sûr d’utiliser Timer car il semble que le temps système de celui-ci soit légèrement supérieur à 1 ms.

Mise à jour : J’ai besoin de ce délai pour être sûr d’avoir reçu les informations les plus récentes du réseau, c’est un logiciel de trading. J’ai besoin de faire quelque chose et puis je dois attendre 1 ms pour voir ce qui se passe. Je peux attendre 1,5 ms, mais pas 3 ms, ce serait trop. Il est normal d’attendre rarement 5 ou 10 ms, mais en général cela devrait être ~ 1 ms

Edit – corrigé “la plupart des résolutions que vous obtiendrez du mode veille à environ 20 ms, au lieu de 100 ms

La résolution maximale du sumil est de 100 millisecondes, même si vous passez en mode veille (1).

Pour ce que cela vaut, un minuteur peut s’avérer plus efficace, particulièrement si vous avez plus d’un thread en veille (System.Threading.Timer utilisera aussi peu de threads que nécessaire si vous allouez plusieurs minuteurs, ils partageront un fil de synchronisation) (extrait du livre Concurrent Programming de Joe Duffy)

Mais plus important encore, qu’essayez-vous de faire? Si vous faites un sondage – vous devez attendre que quelque chose se passe, vous pourrez peut-être utiliser un moyen plus efficace de le faire. Si vous avez juste besoin de lancer une tâche de temps en temps, une timer sera probablement votre meilleur pari.

Si vous ne voulez vous arrêter que pendant une milliseconde, puis-je vous demander pourquoi? Êtes-vous simplement en train d’essayer de vous assurer que votre thread est soumis à d’autres processus?

Il peut y avoir une autre façon de faire cela. Windows a un minuteur haute résolution. Vous pouvez lire à ce sujet ici: “Comment: utiliser le minuteur haute résolution”

Je ne pense pas que cela fonctionne comme un minuteur ordinaire: il ne déclenche pas d’événements, mais vous l’utilisez simplement pour mesurer le temps écoulé avec une grande précision. Cependant, vous pouvez y faire une boucle et exécuter du code lorsqu’une milliseconde est écasting (vous consumrez du processeur tout le temps). De plus, je suis d’accord avec les commentaires de Henk sur le fait que Windows n’est pas un système d’exploitation en temps réel – vous ne savez jamais quand le système d’exploitation suspendra votre thread.