2010-09-21 13 views
4

En recherchant des options pour obtenir une résolution supérieure à la résolution de 15 ms fournie par les objets de minuterie .NET (voir https://stackoverflow.com/questions/3744032/why-are-net-timers-limited-to-15-ms-resolution), je regarde les différents objets de minuterie fournis par Windows. J'ai identifié les éléments suivants:Quels objets de minuterie périodique sont disponibles dans l'API Windows?

Y at-il d'autres types de minuterie disponible dans l'API Windows?

Répondre

8

J'ai posé cette question parce que j'étais intéressé par l'implémentation d'une minuterie périodique qui me donnerait une meilleure granularité que les minuteurs fournis avec .NET. Mon enquête sur ces minuteurs (Windows.Forms.Timer, System.Timers.Timer, et System.Threading.Timer) montre que le mieux que je puisse espérer est une granularité de 15 ms, et une précision de -1 à +30 ms. C'est bien pour la plupart des applications, mais pas pour l'application sur laquelle je travaillais.

Pour les détails de mon enquête, voir Why are .NET timers limited to 15 ms resolution? et http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=815.

Cela m'a conduit à rechercher des objets de minuterie périodiques disponibles sous Windows. J'ai identifié les cinq types que j'ai postés dans la question originale. Je n'en ai pas trouvé d'autres. J'ai abandonné l'ancienne minuterie Windows parce que je ne veux pas traiter les messages. J'ai ensuite écrit des prototypes gérés en C# pour les quatre autres types de minuterie et j'ai fait quelques tests.

Les quatre types de temporisateur (temporisateurs multimédias, temporisateurs d'attente, temporisateurs de file d'attente de temporisation et temporisateurs Threadpool) fournissent un intervalle fiable de 1 ms, avec une très bonne résolution. Parmi ceux-ci, la minuterie Threadpool est de loin la plus facile à interagir, mais malheureusement, elle n'est pas supportée par Windows XP. Les temporisateurs de file d'attente de minuterie ont un éventail vertigineux d'options, mais si vous ignorez la plupart des options, ils sont presque aussi simples que les minuteurs Threadpool. Voir Exploring options for better timers pour plus d'informations.

J'ai choisi d'envelopper le temporisateur de la minuterie de la minuterie pour ma classe de minuterie générale dans .NET. Vous pouvez le voir here. Vous pouvez également être intéressé par Waitable Timers in .NET with C#.