2009-12-07 14 views
3

Je suis curieux de savoir comment la propriété .NET BCL Environment.TickCount est implémentée. En particulier, je voudrais maintenant si elle est affectée par system time adjustments. Ma première estimation de la façon dont la propriété a été implémentée était qu'il s'agissait simplement d'un wrapper géré autour de GetTickCount method. Toutefois, la documentation pour la méthode GetTickCount indique qu'il est affecté par les ajustements effectués par la fonction GetSystemTimeAdjustment mais la documentation pour Environment.TickCount ne mentionne rien sur les ajustements de temps. J'essaie de comprendre si le Environment.TickCount peut être utilisé comme une valeur de temps (quoique de faible précision) augmentant constamment.Est-ce que Environment.TickCount est affecté par les ajustements de l'heure du système?

Répondre

4

Non, Environment.TickCount n'est pas affecté par les ajustements de la durée du système. C'était mon interprétation de la documentation, mais ma curiosité a exigé la preuve plus difficile, donc j'eu la course de code suivant lors du réglage du système avant et en arrière un heure:

while (true) 
{ 
    Console.WriteLine(Environment.TickCount); 
    Thread.Sleep(1000); 
} 

... et la sortie a montré une séquence parfaite qui n'a pas été affecté par les ajustements de temps.

Mise à jour
J'ai donc fait un peu plus de devoirs, déclenchée par la question de Marcus dans les commentaires ci-dessous. Je suis tout à fait sûr (ne pouvait pas confirmer si) que Environment.TickCount fait un appel à GetTickCount qui a mentionné ce qui suit dans la documentation:

La résolution de la fonction GetTickCount est limitée à la résolution du système un temporisateur, qui est typiquement dans la plage de 10 millisecondes à 16 millisecondes. La résolution de la fonction GetTickCount est également affectée par les ajustements effectués par la fonction GetSystemTimeAdjustment .

Ainsi, alors qu'il n'est pas affectée en modifiant le temps du système, il semble que sera être affectés par des ajustements qui sont causées par un appel à SetSystemTimeAdjustment.

+0

(lang: sv Tack!) Hey merci, mais curieux.Êtes-vous certain que les ajustements de l'heure système (le type effrayant incrémentiel décrit dans les documents GetSystemTimeAdjustment où le temps s'exécute plus rapidement ou plus lentement pour rattraper) a vraiment lieu lorsque vous définissez l'heure manuellement? L'heure du système ne passe-t-elle pas directement à l'heure exacte lorsque vous faites cela? –

+1

Je ne suis pas sûr d'où vous obtenez cette citation? La page MSDN pour [GetTickCount] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724408%28v=vs.85%29.aspx) me donne, "fonction _GetTickCount ** n'est pas ** affecté par les ajustements effectués par la fonction GetSystemTimeAdjustment_ " – ahmd0

+0

Bonne capture, @ ahmd0! Je suis curieux, alors j'ai vérifié. Il semble que la page a été mise à jour en août 2010 pour changer de ma citation ci-dessus, à ce qui est là maintenant. Je me demande ce qui s'est passé: les docs étaient-ils faux ou le comportement a-t-il changé? –

2

Non, elle n'est pas affectée par les réglages de l'heure du système.

L'adéquation à une «valeur de temps toujours croissante» dépend de vos besoins exacts. De l'MSDN documentation:

La valeur de cette propriété est dérivé de l'horloge du système et est stocké sous forme un entier signé 32 bits. Par conséquent, si le système fonctionne en continu, TickCount incrémentera de zéro à Int32.MaxValue pendant environ 24,9 jours, puis passer à Int32.MinValue, qui est un nombre négatif, incrémenter retour à zéro au cours des prochains jours 24.9.