Existe-t-il un moyen facile d'obtenir un temps très précis?
Je dois calculer des délais entre les appels de méthode. Plus précisément, je souhaite calculer la vitesse de défilement dans un UIScrollView.
Existe-t-il un moyen facile d'obtenir un temps très précis?
Je dois calculer des délais entre les appels de méthode. Plus précisément, je souhaite calculer la vitesse de défilement dans un UIScrollView.
NSDate
et de la timeIntervalSince*
méthodes de retour d'un NSTimeInterval
qui est un double avec sous-millième de seconde près. NSTimeInterval
est en secondes, mais il utilise le double pour vous donner plus de précision.
Afin de calculer les millisecondes de temps de précision, vous pouvez faire:
// Get a current time for where you want to start measuring from
NSDate *date = [NSDate date];
// do work...
// Find elapsed time and convert to milliseconds
// Use (-) modifier to conversion since receiver is earlier than now
double timePassed_ms = [date timeIntervalSinceNow] * -1000.0;
Documentation sur timeIntervalSinceNow.
Il existe de nombreuses autres façons de calculer cet intervalle à l'aide de NSDate
, et je recommande de regarder la documentation de classe pour NSDate
qui se trouve dans NSDate Classe de Référence.
CFAbsoluteTimeGetCurrent()
renvoie le temps absolu sous forme de valeur double
, mais je ne sais pas quelle est sa précision - il pourrait ne mettre à jour que toutes les dizaines de millisecondes, ou toutes les microsecondes, I ne sais pas.
Je ne voudrais PAS utiliser mach_absolute_time()
parce qu'il interroge une combinaison du noyau et le processeur pour un temps absolu à l'aide de tiques (probablement un temps de fonctionnement).
Ce que je voudrais utiliser:
CFAbsoluteTimeGetCurrent();
Cette fonction est optimisée pour corriger la différence de l'iOS et OSX logiciel et le matériel.
Quelque Chose Geekier
Le quotient d'une différence en mach_absolute_time()
et AFAbsoluteTimeGetCurrent()
est toujours autour de 24000011.154871
Voici un journal de mon application:
Veuillez noter que le résultat final que le temps est une différence en CFAbsoluteTimeGetCurrent()
s'
2012-03-19 21:46:35.609 Rest Counter[3776:707] First Time: 353900795.609040
2012-03-19 21:46:36.360 Rest Counter[3776:707] Second Time: 353900796.360177
2012-03-19 21:46:36.361 Rest Counter[3776:707] Final Result Time (difference): 0.751137
2012-03-19 21:46:36.363 Rest Counter[3776:707] Mach absolute time: 18027372
2012-03-19 21:46:36.365 Rest Counter[3776:707] Mach absolute time/final time: 24000113.153295
2012-03-19 21:46:36.367 Rest Counter[3776:707] -----------------------------------------------------
2012-03-19 21:46:43.074 Rest Counter[3776:707] First Time: 353900803.074637
2012-03-19 21:46:43.170 Rest Counter[3776:707] Second Time: 353900803.170256
2012-03-19 21:46:43.172 Rest Counter[3776:707] Final Result Time (difference): 0.095619
2012-03-19 21:46:43.173 Rest Counter[3776:707] Mach absolute time: 2294833
2012-03-19 21:46:43.175 Rest Counter[3776:707] Mach absolute time/final time: 23999753.727777
2012-03-19 21:46:43.177 Rest Counter[3776:707] -----------------------------------------------------
2012-03-19 21:46:46.499 Rest Counter[3776:707] First Time: 353900806.499199
2012-03-19 21:46:55.017 Rest Counter[3776:707] Second Time: 353900815.016985
2012-03-19 21:46:55.018 Rest Counter[3776:707] Final Result Time (difference): 8.517786
2012-03-19 21:46:55.020 Rest Counter[3776:707] Mach absolute time: 204426836
2012-03-19 21:46:55.022 Rest Counter[3776:707] Mach absolute time/final time: 23999996.639500
2012-03-19 21:46:55.024 Rest Counter[3776:707] -----------------------------------------------------
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.