3
저는 Mac OS X에서 프로그래밍을하는 초보자입니다.mac os x - usb hid - 수신 장치가 추가/장치가 콜백을 제거하는 방법?
다음은이 tutorial입니다.
와 나는이 프로그램을 가지고 : 내가 삽입 할 때 콜백을 가져 오거나 USB 포트의 모든 HID 장치를 제거하지 않기 때문에 내가 잘못하고있는 무슨
#include <stdio.h>
#include <IOKit/hid/IOHIDManager.h>
#include <IOKit/hid/IOHIDKeys.h>
#include <CoreFoundation/CoreFoundation.h>
static void Handle_DeviceMatchingCallback(void *inContext, IOReturn inResult, void *inSender, IOHIDDeviceRef inIOHIDDeviceRef)
{
puts("YAY Handle_DeviceMatchingCallback");
}
static void Handle_DeviceRemovalCallback(void *inContext, IOReturn inResult, void *inSender, IOHIDDeviceRef inIOHIDDeviceRef)
{
puts("YAY Handle_DeviceRemovalCallback");
}
int main()
{
IOHIDManagerRef HIDManager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
IOHIDManagerSetDeviceMatching(HIDManager, NULL);
IOHIDManagerRegisterDeviceMatchingCallback(HIDManager, &Handle_DeviceMatchingCallback, NULL);
IOHIDManagerRegisterDeviceRemovalCallback(HIDManager, &Handle_DeviceRemovalCallback, NULL);
IOHIDManagerScheduleWithRunLoop(HIDManager, CFRunLoopGetMain(), kCFRunLoopDefaultMode);
IOReturn IOReturn = IOHIDManagerOpen(HIDManager, kIOHIDOptionsTypeNone);
if(IOReturn) puts("IOHIDManagerOpen failed.");
while(1)
{
puts("sleeping...");
sleep(1);
}
return 0;
}
.
내 프로그램을 사용하여 끝났을 때 루프에서 어떻게 벗어나나요? 나는 다음을 시도해 본다. CFRunLoopRun(); CFRunLoopRef run_loop = CFRunLoopGetCurrent(); 내가 종료하고 싶을 때 전화 : CFRunLoopStop (run_loop); 하지만 run_loop은 NULL입니다. –
이 메서드는 즉시 반환되지 않으므로이 코드를 콜백에서 호출해야합니다. 따라서 이벤트 (타이머 등)에 대한 새로운 콜백을 생성하고 거기에서'CFRunLoopStop()'을 호출하거나 타이머를 RunLoop에서 제거하여 타이머를 멈추게 할 수 있습니다. –