macos – CFRunLoopObserver与嵌套的CFRunLoops

macos – CFRunLoopObserver与嵌套的CFRunLoops,第1张

概述我有一个 Cocoa UI应用程序,需要像其他UI事件循环许可一样快地更新其主窗口,所以我通过CFRunLoopObserver实现了主更新程序功能.我还有一个应用程序模式警报框和一个上下文菜单. 所以,我的问题是,当我在屏幕上同时显示警报和上下文菜单时,更新程序会卡住,可能是由于嵌套的运行循环数量超过了它在开始时附加到它上面的数量.令人惊讶的是,我可以通过复制观察者来缓解这个问题,并且它一直在运 我有一个 Cocoa UI应用程序,需要像其他UI事件循环许可一样快地更新其主窗口,所以我通过CFRunLoopObserver实现了主更新程序功能.我还有一个应用程序模式警报框和一个上下文菜单.

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

现在的问题是:有没有办法让一个观察者得到执行,无论运行循环堆栈有多深?

解决方法 避开runloop问题,你看过CVdisplaylink吗?

使用CVdisplaylinkCreateWithActiveCGdisplays()设置一个,然后使用CVdisplaylinkSetoutputCallback()附加回调.它会以显示器的刷新率询问数据,因此您可以根据需要快速获得回调.

总结

以上是内存溢出为你收集整理的macos – CFRunLoopObserver与嵌套的CFRunLoops全部内容,希望文章能够帮你解决macos – CFRunLoopObserver与嵌套的CFRunLoops所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1016384.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存