2010-04-12 29 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)); 
}