Айфон: разные системные таймеры? - PullRequest
0 голосов
/ 12 апреля 2010

До сих пор я использовал mach_absolute_time () для всех моих функций синхронизации. вычисление как долго между кадрами и т. д.

Теперь я хочу получить точное время события сенсорного ввода, используя event.timestamp в сенсорных обратных вызовах.

проблема в том, что эти два, похоже, используют совершенно разные таймеры. конечно, вы можете получить их обоих за считанные секунды, но их происхождение различно и, казалось бы, случайно ...

Есть ли способ синхронизации двух разных таймеров?

или в любом случае можно получить доступ к тому же таймеру, который сенсорный ввод использует для генерации этого свойства отметки времени? в противном случае это почти бесполезно.

Ответы [ 3 ]

1 голос
/ 21 января 2011

У меня были некоторые проблемы с этим самим. Хорошей документации не так много, поэтому я пошел экспериментировать. Вот что мне удалось определить:

mach_absolute_time зависит от процессора устройства. Он возвращает тики с момента последней перезагрузки устройства (также известной как uptime). Чтобы получить его в удобочитаемой форме, вы должны изменить его по результату mach_timebase_info (отношение), которое будет возвращать миллиардные доли секунды (или наносекунды). Чтобы сделать это более удобным, я использую функцию, подобную приведенной ниже:

#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));
}
0 голосов
/ 12 апреля 2010

Как насчет CFAbsoluteTimeGetCurrent?

0 голосов
/ 12 апреля 2010

Получите начальную разницу между двумя, т.е. что возвращается mach_absolute_time() вначале, когда ваше приложение запускается, а также одновременно получает event.timestamp ...

сохранить разницу ... она будет оставаться неизменной на протяжении всего времени работы приложения ... так что вы можете использовать эту разницу во времени для преобразования одного в другое ...

...