2012-02-11 72 views
3

我已經使用IOHIDManagerScheduleWithRunLoop在主線程(runLoop)上安排了HIDManager。 因此,我收到主線程上匹配&刪除回調的設備。HID報告回調在不同的runLoop

但是,我在另一個線程上安排了一個設備IOHIDDeviceScheduleWithRunLoop,說線程1。根據它的文檔,當我設置一個報告時,我應該收到Thread-1 RunLoop的回調。

IOHIDDeviceScheduleWithRunLoop(inIOHIDDeviceRef,CFRunLoopGetCurrent(),kCFRunLoopDefaultMode);

但是,我接收主線程上的HIDReport回調。 有什麼幫助嗎?

UPDATE:

我看就算我刪除IOHIDDeviceScheduleWithRunLoop報告回調獲取調用。報告回調應該在設備RunLoop上調用。

根據IOHIDManagerScheduleWithRunLoop的文檔「這正式關聯與客戶端的運行循環的HID管理器。此計劃將傳播到當前枚舉所有的HID設備和新的HID設備,因爲它們是由HID經理匹配」

這應該只用於匹配和刪除,但我也獲取輸入報告。

回答

0

線程1上有runloop嗎?如果它是一個命令行應用程序,則必須明確啓動一個運行循環(通過調用實例CFRunLoopRun())

+0

是的,我正在啓動一個新線程並使用CFRunLoopRun調用它。 但是,在此之前,我已經使用CFGetCurrentRunLoop將它附加到IOHIDDeviceScheduleWithRunLoop – coder000001 2012-02-11 14:38:25