cocoa - 使用 USB 和 CFRunLoopSource 的 Mac 示例代码

标签 cocoa macos usb macos-carbon

我正在尝试(重新)编写一个使用 USB 控制的扫描仪的程序。我已经设置了 USBIOInterfaceInterface,因此我可以通过管道发送和接收消息。我成功同步调用 WritePipeTOReadPipeTO,但我想异步从扫描仪读取。

我尝试使用ReadPipeAsyncTO,但回调永远不会被调用,直到调用超时。原因似乎是我没有在某处注册回调。如果我在异步读取之后添加一个 CFRunLoopRun ,那么它似乎可以工作,但只能通过对 CFRunLoopRun 进行许多嵌套调用来实现,这不是一个好主意。

我见过这些功能:

    err = (*usbInterfaceInterface)->CreateInterfaceAsyncEventSource(usbInterfaceInterface, &cfSource);
    CFRunLoopAddSource(CFRunLoopGetCurrent(), cfSource, kCFRunLoopDefaultMode);

但我还没有弄清楚如何告诉源当该接口(interface)上发生某些事情时应该调用什么回调。当我刚刚创建源并调用 ReadPipeAsyncTO 时,直到超时才会调用回调。

是否有相同的示例代码,以便我可以了解这些函数如何协同工作?

最佳答案

调用 CFRunLoopRun 或其 NSRunLoop 等效项,几乎总是表明您的程序架构错误。

听起来这会是一件非常痛苦的事情,但是如果您使用 ReadPipeAsyncTOWritePipeAsyncTO 函数,您的应用程序会好得多,并且可以正常工作。重写它以使用运行循环而不是您当前拥有的任何手动循环。

关于cocoa - 使用 USB 和 CFRunLoopSource 的 Mac 示例代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3330773/

相关文章:

macos - Mac Tex 环境

c - 使用自定义 INF 的微 Controller 的 USB 驱动程序安装问题

objective-c - 为什么不在 NIB 中强制执行严格的单例应用程序委托(delegate)对象?

cocoa - 如何使用 Cocoa 实现布局编辑器

ios - 如何使 AFNetworking 显示纯 HTTP 响应错误

macos - iTerm2 打印出一个空字符

swift - 验证是否安装了帮助工具

MacOSX 中的 clGetEventProfilingInfo() 错误?

java - BufferedReader 在从 USB 读取时跳过随机字符

c# - 授权 USB 驱动器