我在 Mac 上调试我的 HID 驱动程序代码中的崩溃,发现崩溃发生在 CFRunLoop 中。在驱动程序代码中,我打开与我的 HID 设备匹配的 VID 和 PID 的设备的 USB 句柄,然后使用 setInterruptReportHandlerCallback 函数为其设置中断回调,然后使用 CFRunLoopAddSource 调用将其添加到 CFRunLoop。在我调用关闭句柄时,我使用 CFRunLoopRemoveSource 释放它们,然后在 CFRunLoopSourceRef 上使用 CFRelease 。
当我尝试打开句柄等待一段时间(5ms)然后在循环中关闭句柄时会出现问题。
当我搜索问题时,我遇到了一个链接,在该链接中他们遇到了与我的http://lists.apple.com/archives/usb/.../msg00099.html类似的问题,他们使用 CFRunLoopSourceInvalidate 调用而不是删除源调用。当我在关闭句柄调用中将其更改为 Invalidate source 时,它修复了我的崩溃。我想知道崩溃之间有什么区别,为什么这个调用修复了我的崩溃?
感谢 jbsp72