gpt4 book ai didi

macos - CFRunLoopObserver 与嵌套 CFRunLoops

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

我有一个 Cocoa UI 应用程序,需要在其 UI 事件循环的其余部分允许的情况下尽可能快地更新其主窗口,因此我通过 CFRunLoopObserver 实现了主更新程序函数。我还有一个应用程序模式警报框和一个上下文菜单。

所以,我的问题是,当我在屏幕上同时显示警报和上下文菜单时,更新程序会卡住,这可能是由于嵌套运行循环的数量超出了它在开始时附加的运行循环的数量。令人惊讶的是,我可以通过复制观察者来缓解这个问题,并且它会继续运行——只有一个实例,在“阻塞”嵌套循环开始时从现有的两个实例中随机选择。当它结束时(选择菜单项、警报超过超时时间或手动解除 - 无论如何),事情恢复正常,并且被阻止的观察者重新获得运行的能力。

现在的问题是:有没有办法让单个观察者无论运行循环堆栈有多深都能被执行?

最佳答案

回避运行循环问题,您看过CVDisplayLink吗?

您可以使用CVDisplayLinkCreateWithActiveCGDisplays()进行设置,然后使用CVDisplayLinkSetOutputCallback()附加回调。它会以显示器的刷新率请求数据,因此您将根据需要尽快获得回调。

关于macos - CFRunLoopObserver 与嵌套 CFRunLoops,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42460634/

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