gpt4 book ai didi

objective-c - Cocoa 中 GetNextEvent 的现代等价物是什么?

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

我正在将一个古老的 C++/Carbon 程序移植到 Obj-C 和 Cocoa。当前版本使用异步usb读取和GetNextEvent来读取数据。

当我尝试在 Objective C 中编译它时,找不到 GetNextEvent,因为它位于 Carbon 框架中。

搜索 Apple 支持没有任何用处。

编辑添加:

好吧,我想做的是通过 USB 运行文档扫描仪。我已经设置了 USBDeviceInterface 和 USBInterfaceInterface(谁想出了这个名字???),然后我调用 (*usbInterfaceInterface)->WritePipeTO() 来询问扫描仪扫描。我相信这有效。至少平板灯会在页面上移动......

然后我尝试使用 *(usbInterfaceInterface))->ReadPipeAsyncTO() 读取数据。我给这个函数一个回调函数,USBDoneProc()

总体结构为:

StartScan()
WaitForScan()

StartScan() 调用 WritePipeTOReadPipeAsyncTO

WaitForScan() 具有以下内容:

while (deviceActive) {
EventRecord event;
GetNextEvent(0,&event);
if (gDataPtr != saveDataPtr) { // more data up the timeout
timeoutTicks = TickCount() + 60 * 60;
saveDataPtr = gDataPtr;
}
if (TickCount() > timeoutTicks) {
deviceActive = false;
}
}

同时,USBDoneProc 递增 gDataPtr,使其成为我们目前已读取的数据的结尾。据我所知,它在异步读取期间被调用多次,由回调自动调用。

如果我在工作代码中执行 GetNextEvent() 调用,则在异步 readpipe 超时之前不会调用 USBDoneProc

所以在我看来,我需要一些东西来将控制权交还给事件处理程序,以便 USBRead 中断实际上可以中断并调用 USBDoneProc...

这有意义吗?

thanks.

最佳答案

我想最接近 Cocoa 等价物的是 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:]。但请记住,即使对于 Carbon 来说,GetNextEvent 也是过时的。处理事件的首选方式是“不要调用我们,我们会调用您”方案,其中应用程序调用 NSApplicationMainRunApplicationEventLoop 并将事件分派(dispatch)给您.

编辑添加:您的应用程序有正常的事件循环吗?如果是这样,也许 WaitForScan 可以启动 Carbon 计时器并返回到事件循环。每次计时器触发时,执行您在 WaitForScan 循环中所做的操作。

关于objective-c - Cocoa 中 GetNextEvent 的现代等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3321104/

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