2010-04-12 3 views
0

J'ai utilisé mach_absolute_time() pour toutes mes fonctions de temporisation jusqu'ici. calculer combien de temps entre les images, etc.IPhone: différentes minuteries de système?

Je veux maintenant connaître l'heure exacte où les événements d'entrée tactile se produisent en utilisant event.timestamp dans les rappels tactiles. Le problème est que ces deux semblent utiliser des minuteries complètement différentes. Bien sûr, vous pouvez les obtenir tous les deux en quelques secondes, mais leurs origines sont différentes et apparemment aléatoires ...

Y at-il un moyen de synchroniser les deux temporisateurs différents?

ou existe-t-il un moyen d'accéder à la même minuterie que l'entrée tactile utilise pour générer cette propriété d'horodatage? sinon c'est à côté de inutile.

Répondre

0

Obtenez le différence initiale entre deux -à-dire ce qui est retourné par mach_absolute_time() initally au démarrage de votre application et obtenez également le event.timestamp d'abord en même temps ...

magasin la différence ... il resterait même à travers le temps de votre application fonctionne .. de sorte que vous pouvez utiliser cette différence de temps pour convertir un à l'autre ...

+0

umm, mon cerveau fait mal. Je ne pense pas que cela fonctionne, j'ai appelé mach_absolute_time() et je l'ai comparé à l'event.timestamp à chaque fois que je recevais un callback en entrée, et la différence n'était jamais la même, variant sensiblement. après tout, le point entier de l'horodatage serait de vous dire quand l'even a effectivement lieu, de sorte que le rappel peut être appelé quand jamais. donc la différence de temps entre le moment où l'entrée se produit réellement et le moment où le rappel est appelé et que je peux appeler mach_absolute_time est complètement aléatoire et variable. – matt

+0

vous avez mal interprété ma réponse ... il suffit de prendre la différence initiale event.timestamp renvoie l'heure dans exactement quelle référence ... Pouvez-vous mettre une déclaration de log et le code pour le même ... –

1

J'ai eu quelques problèmes avec moi-même. Il n'y a pas beaucoup de bonne documentation, alors je suis parti avec l'expérimentation. Voici ce que j'ai pu déterminer:

mach_absolute_time dépend du processeur de l'appareil. Il renvoie des ticks depuis le dernier redémarrage de l'appareil (autrement dit uptime). Pour l'obtenir sous une forme lisible par l'homme, vous devez le modifier par le résultat de mach_timebase_info (un ratio), qui retournera un milliardième de seconde (ou nanosecondes). Pour rendre ceci plus utilisable j'utilise une fonction comme celle ci-dessous:

#include <mach/mach_time.h> 

int getUptimeInMilliseconds() 
{ 
static const int64_t kOneMillion = 1000 * 1000; 
static mach_timebase_info_data_t s_timebase_info; 

if (s_timebase_info.denom == 0) { 
    (void) mach_timebase_info(&s_timebase_info); 
} 

// mach_absolute_time() returns billionth of seconds, 
// so divide by one million to get milliseconds 
return (int)((mach_absolute_time() * s_timebase_info.numer)/(kOneMillion * s_timebase_info.denom)); 
} 
Questions connexes