作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Cocoa UI 应用程序,需要在其 UI 事件循环的其余部分允许的情况下尽可能快地更新其主窗口,因此我通过 CFRunLoopObserver 实现了主更新程序函数。我还有一个应用程序模式警报框和一个上下文菜单。
所以,我的问题是,当我在屏幕上同时显示警报和上下文菜单时,更新程序会卡住,这可能是由于嵌套运行循环的数量超出了它在开始时附加的运行循环的数量。令人惊讶的是,我可以通过复制观察者来缓解这个问题,并且它会继续运行——只有一个实例,在“阻塞”嵌套循环开始时从现有的两个实例中随机选择。当它结束时(选择菜单项、警报超过超时时间或手动解除 - 无论如何),事情恢复正常,并且被阻止的观察者重新获得运行的能力。
现在的问题是:有没有办法让单个观察者无论运行循环堆栈有多深都能被执行?
最佳答案
回避运行循环问题,您看过CVDisplayLink
吗?
您可以使用CVDisplayLinkCreateWithActiveCGDisplays()
进行设置,然后使用CVDisplayLinkSetOutputCallback()
附加回调。它会以显示器的刷新率请求数据,因此您将根据需要尽快获得回调。
关于macos - CFRunLoopObserver 与嵌套 CFRunLoops,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42460634/
我有一个 Cocoa UI 应用程序,需要在其 UI 事件循环的其余部分允许的情况下尽可能快地更新其主窗口,因此我通过 CFRunLoopObserver 实现了主更新程序函数。我还有一个应用程序模式
我是一名优秀的程序员,十分优秀!