如何查询以了解MacOS / X应用程序是否处于应用程序小睡模式?

时间:2018-09-26 23:47:14

标签: c++ macos

我有一个在MacOS(10.10及更高版本)上运行的C ++应用程序(基于Qt),并且我希望它在MacOS的app-nap mode下运行时对其行为进行一些修改。 (特别是,它会进行一些定期的网络查询以更新其GUI中的状态指示器,但是如果应用程序正在小睡,我希望它在从午睡中醒来之前停止执行这些操作)。

如果我有这样的功能:

 bool IsThisProcessNapping();  // returns true iff we're in app-nap mode

...我想我可以实现我想要的行为,但是我不知道任何这样的功能。它以其他名称存在吗?

(请注意,我不想只禁用应用程序小睡,因为我希望程序尽可能节能)

1 个答案:

答案 0 :(得分:1)

我不确定您的问题是否有特定答案(我认为您所说的API实际上并不存在)。

您可以先阅读Energy Efficiency Guide for Mac Apps,尤其是“增强应用程序小睡”部分:

  

默认情况下,如果您的应用未处于活跃状态,则可以使用该应用   与用户互动,并且尚未更新一些可见窗口   时间长短。但是,您的应用最了解重要性   活动,并且不应该依赖App Nap使其处于闲置状态   州。增强App Nap的最有效方法是让您的应用   监听不再使用的通知,以及   尽快暂停耗能的工作

鉴于您所描述的情况(暂停网络请求以更新状态指示器),请检出Notify Your App When Visibility Changes

它具有应用程序委托方法applicationDidChangeOcclusionState:windowDidChangeOcclusionState:的示例。当您的应用程序或相关窗口被遮挡时,您可以暂停网络活动,并在遮挡状态恢复到可见状态时恢复网络活动。

上述指南还链接到类似的文档,用于检查您应用的活动状态。

如果您的应用程序不可见且未激活,则可以选择应用程序小睡。到那时,如果应用程序实际上正在小睡,对您的情况有什么影响?如果您的目标是提高能源效率,请在该应用程序不可见时暂停您的网络活动-因为仍然没有人可以看到您的状态指示器!