2010-04-12 56 views
0

到目前为止,我一直使用mach_absolute_time()来完成所有的定时功能。计算帧之间的时间差等。iPhone:不同的系统计时器?

我现在想要在触摸回调中使用event.timestamp获得触摸输入事件的确切时间。

问题是这两个似乎使用完全不同的定时器。当然,你可以在几秒钟内得到他们,但他们的起源是不同的,似乎是随机的...

有什么办法来同步两个不同的计时器?

或者是否有权访问触摸输入用于生成时间戳记属性的相同定时器?否则其旁边无用。

回答

0

获取之间有两个,即 什么是mach_absolute_time()返回initally当你的应用程序启动并同时获得event.timestamp最初在同一时间...

店的区别初始偏差...这将保持通过你的应用程序运行时间相同..所以你可以使用这个时间差来转换一个到另一个...

+0

嗯,我的大脑很痛。我不认为这是可行的,我确实调用mach_absolute_time()并将其与event.timestamp进行比较,每当我得到一个输入回调时,差异就不相同,变化相当明显。毕竟,时间戳的全部要点是告诉你什么时候偶发生,所以回调可以被调用。所以实际发生输入的时间与实际调用回调的时间之间的差异,我可以调用mach_absolute_time,完全是随机的和可变的。 – matt 2010-04-12 23:02:05

+0

你错误地解释了我的答案...只是采取初步的区别event.timestamp返回时间正是在哪个参考...你可以把日志语句和代码相同... – 2010-04-13 04:37:47

1

这个自己有些麻烦。没有很多很好的文档,所以我进行了实验。这是我能够确定的:

mach_absolute_time取决于设备的处理器。它自设备上次重新启动后(否则称为正常运行时间)返回滴答声。为了以人类可读的形式得到它,你必须通过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)); 
}