gpt4 book ai didi

usb - 从 IOKit (CoreFoundation) 接收插入设备的通知时出现问题

转载 作者:行者123 更新时间:2023-12-02 03:53:34 27 4
gpt4 key购买 nike

我目前正在 10.6.7 上开发一个应用程序,当插入新的 USB 设备时,该应用程序应该收到通知。我发现有一个 IOKit 函数可以处理“IOServiceAddMatchingNotification”等内容。因为这个特定函数的返回值是 0,所以我认为问题可能出在我的匹配字典中,该字典被赋予这个函数。我这样声明字典:

CFMutableDictionaryRef matchingDict = IOServiceMatching(kIOUSBDeviceClassName);

因为我不想收到每个设备的通知,所以我不知道这是否是创建此特定词典的正确方法。

我的完整代码如下所示:

ioKitNotificationPort = IONotificationPortCreate(kIOMasterPortDefault);
notificationRunLoopSource = IONotificationPortGetRunLoopSource(ioKitNotificationPort);

CFRunLoopAddSource(CFRunLoopGetCurrent(), notificationRunLoopSource, kCFRunLoopDefaultMode);

CFMutableDictionaryRef matchingDict = IOServiceMatching(kIOUSBDeviceClassName);


addMatchingNotificationResult = IOServiceAddMatchingNotification(ioKitNotificationPort,
kIOPublishNotification,
matchingDict,
deviceAdded,
NULL,

有人知道为什么这行不通吗?(注:Callback函数是一个static void c函数,其余的被包装在ins中ide 一个 Obj-C 类)。

谢谢

Xcode 4、10.6.7

最佳答案

奇怪的是,在启用通知之前,您必须清空 IOServiceAddMatchingNotification 返回的迭代器。我在提供的代码中没有看到这一点,因此这可能是问题所在。实际上,您需要保留该迭代器来保持通知运行。

io_iterator_t ioNotification;

addMatchingNotificationResult = IOServiceAddMatchingNotification(ioKitNotificationPort,
kIOPublishNotification,
matchingDict,
deviceAdded,
NULL,
&ioNotification);

while ((service = IOIteratorNext(ioNotification)))
{
NSLog(@"Hey, I found a service!");

IOObjectRelease(service); // yes, you have to release this
}

关于usb - 从 IOKit (CoreFoundation) 接收插入设备的通知时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5612007/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com