2017-08-01 31 views
0

在Cocoa中,NSEvents有一個timestamp屬性,它返回一個時間間隔,表示「系統啓動後事件發生的秒數」。我正在編寫一個需要這些信息的應用程序 - 正好在用戶按下按鍵時。但我擔心時間戳可能不夠準確。時間間隔本身具有亞毫秒級精度,這非常棒。是否有任何文檔指出是否使用亞毫秒精度爲代表鍵盤和鼠標輸入的NSEvents提供準確的時間戳?輸入事件(鍵盤/鼠標)的NSEvent時間戳的準確性?

如果我不得不猜測蘋果的執行情況,我希望NSEvent的時間戳可能在硬件中斷後很快產生,這將非常棒。不過,我也可以想象一個輪詢鍵盤/鼠標輸入的系統,並且只在下一個輪詢間隔到來並讀取輸入時填充時間戳字段。

非常感謝任何見解。

回答

0

你可能會發現蘋果的Cocoa Event Handling Guide: Event Architecture文件有用的閱讀。從此:

在將事件分派給應用程序之前,窗口服務器以各種方式對其進行處理;它會給它加上時間戳,用關聯的窗口和進程端口註釋它,並且還可能執行其他任務。

這似乎表明生活在內核和應用程序層之間的窗口服務器應用時間戳...雖然它有可能讀取在較低級別生成的元數據,以便執行此操作。

我會認爲最好的方式來獲得更好的理解這將是編寫一個應用程序,記錄鍵向下/向上事件的時間戳,並尋找相鄰事件中的精確匹配。如果您看到幾個具有(幾乎)相同時間戳的行中的多個事件,那麼它們更有可能在獲得時間戳之前在某個緩衝區中排隊。如果相鄰事件之間存在足夠的差距,則更可能在硬件事件的附近加蓋標記。

+0

非常感謝答覆和鏈接。您對如何感受系統性能的建議是一個很好的建議。我希望有更多關於窗口服務器事件隊列的詳細信息以及它是如何填充的。在理想的世界中,您提到的元數據或文章中提到的關於按鍵的「其他信息」包括類似於事件記錄生成並傳遞到窗口服務器時的系統正常運行時間戳。 – milkshake