Как я могу запросить, чтобы узнать, находится ли мое приложение MacOS / X в режиме app-nap?

У меня есть приложение C ++ (на основе Qt), работающее на MacOS (10.10 и новее), и я бы хотел, чтобы оно немного изменило свое поведение, когда оно работает под MacOS. режим app-nap. (В частности, существуют некоторые периодические сетевые запросы, которые он выполняет для обновления индикаторов состояния в своем графическом интерфейсе, но если приложение дремлет, я бы предпочел, чтобы оно прекратило их выполнение до тех пор, пока оно не проснется от дремоты).

Если бы у меня была такая функция:

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

… Я думаю, что мог бы реализовать желаемое поведение, но я не знаю ни одной такой функции. Существует ли оно под другим именем?

(Обратите внимание, что я не хочу просто отключать app-nap, поскольку я хочу, чтобы моя программа была энергоэффективной, если это возможно)

2

Решение

Я не уверен, что есть конкретный ответ на ваш вопрос (я не думаю, что API, о котором вы говорите, действительно существует).

Вы могли бы начать с чтения Руководство по энергоэффективности для приложений Mac, особенно раздел «Улучшение App Nap»:

По умолчанию ваше приложение получает право на App Nap, если оно не активно
взаимодействует с пользователем и не обновил видимое окно для некоторых
протяженность времени. Тем не менее, ваше приложение знает больше всего о важности
его деятельности, и не следует полагаться на App Nap, чтобы положить его в режим ожидания
государство. Самый эффективный способ улучшить App Nap — это
прослушивать уведомления о том, что он больше не используется, и
как можно быстрее приостановить энергоемкую работу

Учитывая сценарий, который вы описываете (приостановка сетевых запросов на обновление индикаторов состояния), проверьте Уведомлять ваше приложение при изменении видимости.

У него есть примеры методов делегата приложения applicationDidChangeOcclusionState: а также windowDidChangeOcclusionState:, Когда ваше приложение или соответствующее окно закрыто, вы можете приостановить сетевую активность и возобновить ее, когда состояние окклюзии снова станет видимым.

Упомянутое выше руководство также ссылается на аналогичную документацию для проверки активного состояния вашего приложения.

Если ваше приложение не видно и не активно, оно является кандидатом на App Nap. В таком случае, какая разница в вашем случае, если приложение уже дремлет? Если ваша цель состоит в том, чтобы быть энергоэффективной, приостановите сетевую активность, как только приложение не будет видно — так как никто не может видеть ваш индикатор состояния в любом случае!

1

Другие решения

Других решений пока нет …