2012-02-11 2 views
3

IHIDManagerScheduleWithRunLoop을 사용하여 주 스레드 (runLoop)에서 HIDManager를 예약했습니다. 그래서, 메인 스레드에서 & 제거 콜백과 일치하는 장치를 얻습니다.HID 다른 runLoop에서 콜백보고

그러나 다른 스레드에 IOHIDDeviceScheduleWithRunLoop 장치를 예약했습니다. 스레드 1로 말하십시오. 문서에 따르면, 보고서를 설정할 때 Thread-1 RunLoop에서 콜백을 수신해야합니다.

IOHIDDeviceScheduleWithRunLoop (inIOHIDDeviceRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);

그러나 주 스레드에서 HIDReport 콜백을 수신합니다. 도움이 되었습니까?

UPDATE :

내가 보고서 콜백이 나는 IOHIDDeviceScheduleWithRunLoop을 제거하더라도라고 점점 참조하십시오. 장치 RunLoop에서 호출되는 보고서 콜백입니다.

IOHIDManagerScheduleWithRunLoop의 문서에 따르면 "이것은 HID 관리자를 클라이언트의 실행 루프와 공식적으로 연결합니다.이 일정은 현재 열거 된 모든 HID 장치와 HID 관리자와 일치하는 새 HID 장치로 전파됩니다"

이 내용은 일치 및 제거에만 사용해야하며, 입력 보고서에도 적용됩니다.

답변

0

스레드 1에 런 루프가 있습니까? 명령 줄 앱인 경우 명시 적으로 실행 루프를 시작해야합니다 (예 : CFRunLoopRun())

+0

예, 새 스레드를 시작하고 CFRunLoopRun으로 호출합니다. 그러나 그 전에 CFGetCurrentRunLoop을 사용하여 IOHIDDeviceScheduleWithRunLoop에 연결했습니다. – coder000001