106 votes

Comment obtenir une heure précise, par exemple en millisecondes dans Objective-C?

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.

127voto

Jeff Thompson Points 1248

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.

42voto

Kristopher Johnson Points 34554

mach_absolute_time() peut être utilisé pour obtenir des mesures précises.

Voir http://developer.apple.com/qa/qa2004/qa1398.html

16voto

Adam Rosenfield Points 176408

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.

10voto

Nathaniel Symer Points 417

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] -----------------------------------------------------

5voto

gngrwzrd Points 740
 #define CTTimeStart() NSDate * __date = [NSDate date]
#define CTTimeEnd(MSG) NSLog(MSG " %g",[__date timeIntervalSinceNow]*-1)
 

Usage:

 CTTimeStart();
...
CTTimeEnd(@"that was a long time:");
 

Sortie:

 2013-08-23 15:34:39.558 App-Dev[21229:907] that was a long time: .0023
 

Prograide.com

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.

Powered by:

X