2009-09-17 3 views

Répondre

6

Si c'est un compteur à haute résolution, il n'y a aucune garantie que la valeur a tout corrélation avec le temps réel - par exemple, il peut bien être "ticks depuis le démarrage de l'ordinateur." Pour un temporisateur de haute résolution non, vous pouvez utiliser new DateTime(Stopwatch.GetTimestamp()) mais cela ne donnera pas nécessairement une valeur utile pour un temporisateur haute résolution. (Ce n'est certainement pas sur ma boîte.)

Qu'est-ce que vous essayez d'utiliser pour ça? L'idée de Stopwatch est de mesurer intervalles de temps.

+0

Voulait demander pourquoi "pas de corrélation"? Les ticks d'OS sont constants, donc 100 ms devrait être très similaire à 100 ms sur n'importe quelle horloge (en termes d'intervalle). La seule façon dont ils devraient différer est un décalage entre le temps réel et l'initialisation du compteur de tick OS, correct? Après l'initialisation du compteur de ticks Os, la longueur de l'intervalle devrait être la même que pour une "horloge" précise? –

+1

@Mindaugas: L'horloge du système peut avoir changé en raison d'un changement de fuseau horaire, d'une correction manuelle de l'heure ou d'une correction automatique, par ex. via NTP. Le fait est que si vous voulez mesurer le temps écoulé, vous utilisez un chronomètre, mais cela * ne vous * donnera pas un horodatage car il ne mesure que le temps écoulé. –

+0

Merci beaucoup! Je pensais à une plage de temps plus courte, mais merci de me donner plus de compréhension. –

0

Gardez à l'esprit que si vous essayez de suivre le temps écoulé, vous devez utiliser:

Stopwatch sw = Stopwatch.StartNew(); 
//do stuff 
sw.Elapsed; //or 
sw.ElapsedMilliseconds; 

Il convertit avec précision les tiques en temps réel. Convertir les ticks en un DateTime, puis en comparant le DateTimes fonctionnerait également, mais ce qui précède est plus simple.

Certains (dont moi-même) ont le code utilisé par erreur comme ça, et a obtenu de mauvais temps: il

startTime = Stopwatch.GetTimestamp(); 

totalTime = (Stopwatch.GetTimestamp() - startTime)/10000; 
//it was assumed 10,000 ticks was a millisecond, incorrectly 
+1

Chronomètre.Fréquence, qui est le nombre de ticks pr. sec, peut être utilisé pour corriger votre dernier exemple: elapsedMs = (Stopwatch.GetTimestamp() - startTime)/(Stopwatch.Frequency/1000); – Jens

Questions connexes