gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:26:31 25 4
gpt4 key购买 nike

我正在尝试(重新)编写一个使用 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/

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