到目前为止,我一直在为所有计时功能使用mach_absolute_time()。计算帧之间的时间等。
我现在想要在触摸回调中使用event.timestamp获得触摸输入事件发生的确切时间。
问题是这两个似乎使用完全不同的计时器。当然,你可以在几秒钟内得到它们,但它们的起源是不同的,看似随机......
有没有办法同步两个不同的计时器?
或者无论如何都可以访问触摸输入用来生成该时间戳属性的同一个计时器?否则它就没用了。
答案 0 :(得分: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));
}
答案 1 :(得分:0)
获得两者之间的初始差异
应用程序启动时mach_absolute_time()
初始返回的内容,最初同时获取event.timestamp ...
存储差异......在应用程序运行的时候它会保持不变..所以你可以使用这个时差将一个转换为另一个......
答案 2 :(得分:0)