如何查询以确定我的 MacOS/X 应用程序是否处于应用程序午睡模式?
How can I query to find out if my MacOS/X app is in app-nap mode?
我有一个在MacOS(10.10及更高版本(上运行的C++应用程序(基于Qt(,我希望它在MacOS的应用程序午睡模式下运行时稍微修改其行为。 (特别是,它执行一些定期网络查询以更新其 GUI 中的状态指示器,但如果应用程序正在打盹,我希望它停止执行这些查询,直到它从午睡中醒来(。
如果我有这样的功能:
bool IsThisProcessNapping(); // returns true iff we're in app-nap mode
。我想我可以实现我想要的行为,但我不知道任何这样的功能。 它以其他名称存在吗?
(请注意,我不想只是禁用app-nap,因为如果可能的话,我希望我的程序是节能的(
我不确定你的问题是否有具体的答案(我认为你谈论的 API 实际上不存在(。
您可以从阅读Mac应用程序的能源效率指南开始,尤其是"增强应用程序小睡"部分:
默认情况下,如果您的应用未处于活动状态,则它有资格使用 App Nap。 与用户互动,但尚未更新某些用户的可见窗口 时间长度。但是,你的应用最了解重要性 的活动,并且不应依赖 App Nap 将其置于空闲状态 州。增强 App Nap 的最有效方法是让您的应用: 侦听它不再处于活动状态的通知,并 尽快暂停能源密集型工作
鉴于您描述的方案(暂停网络请求以更新状态指示器(,请查看在可见性更改时通知应用。
它有应用程序委托方法的示例applicationDidChangeOcclusionState:
和windowDidChangeOcclusionState:
。当应用或相关窗口被遮挡时,您可以暂停网络活动,并在遮挡状态恢复为可见时恢复活动。
上面提到的指南还链接到用于检查应用活动状态的类似文档。
如果你的应用不可见且未处于活动状态,则它是 App Nap 的候选项。在这一点上,如果应用程序实际上还在打盹,这对您有什么区别?如果您的目标是节能,请在应用程序不可见后暂停您的网络活动 - 因为无论如何没有人可以看到您的状态指示器!
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 如何使用C++确定应用程序是否已在窗口中启动?
- 如何查询以确定我的 MacOS/X 应用程序是否处于应用程序午睡模式?
- 确定C++应用程序是否作为具有旧版支持的 UWP 应用运行
- Windows 和 Android 应用程序是否需要 SSL?
- 根据应用程序是否已自动化显示不同的 QML 文件
- 如何检查应用程序是否安装了 jni?
- 使用 IPC 共享内存的应用程序是否可以访问彼此的代码?
- 在 64 位 Windows 上运行的 32 位应用程序是否仍然需要使用 SAFESEH 进行编译
- 如何检查应用程序是否在OpenOnload下运行
- 如何检测我的Windows应用程序是否已经结束
- Windows开发:如何确定我的应用程序是否正在泄漏内存
- 以 Windows 服务身份运行应用程序是否需要管理员权限
- 检查Qt c ++应用程序是否以sudo的形式运行
- 基于libpcap的应用程序是否会影响网络速度/性能
- C++:验证 Windows 应用程序是否已打开
- 监视C++OpenFrameworks应用程序是否冻结或内存泄漏,然后强制退出并重新启动
- 如何确定我的应用程序是否在SYSTEM帐户下运行
- C/C++应用程序是否可以使用 OpenCL
- GLEW 对于最新的 OpenGL 应用程序是否是强制性的