У меня есть приложение C ++ (на основе Qt), работающее на MacOS (10.10 и новее), и я бы хотел, чтобы оно немного изменило свое поведение, когда оно работает под MacOS. режим app-nap. (В частности, существуют некоторые периодические сетевые запросы, которые он выполняет для обновления индикаторов состояния в своем графическом интерфейсе, но если приложение дремлет, я бы предпочел, чтобы оно прекратило их выполнение до тех пор, пока оно не проснется от дремоты).
Если бы у меня была такая функция:
bool IsThisProcessNapping(); // returns true iff we're in app-nap mode
… Я думаю, что мог бы реализовать желаемое поведение, но я не знаю ни одной такой функции. Существует ли оно под другим именем?
(Обратите внимание, что я не хочу просто отключать app-nap, поскольку я хочу, чтобы моя программа была энергоэффективной, если это возможно)
Я не уверен, что есть конкретный ответ на ваш вопрос (я не думаю, что API, о котором вы говорите, действительно существует).
Вы могли бы начать с чтения Руководство по энергоэффективности для приложений Mac, особенно раздел «Улучшение App Nap»:
По умолчанию ваше приложение получает право на App Nap, если оно не активно
взаимодействует с пользователем и не обновил видимое окно для некоторых
протяженность времени. Тем не менее, ваше приложение знает больше всего о важности
его деятельности, и не следует полагаться на App Nap, чтобы положить его в режим ожидания
государство. Самый эффективный способ улучшить App Nap — это
прослушивать уведомления о том, что он больше не используется, и
как можно быстрее приостановить энергоемкую работу
Учитывая сценарий, который вы описываете (приостановка сетевых запросов на обновление индикаторов состояния), проверьте Уведомлять ваше приложение при изменении видимости.
У него есть примеры методов делегата приложения applicationDidChangeOcclusionState:
а также windowDidChangeOcclusionState:
, Когда ваше приложение или соответствующее окно закрыто, вы можете приостановить сетевую активность и возобновить ее, когда состояние окклюзии снова станет видимым.
Упомянутое выше руководство также ссылается на аналогичную документацию для проверки активного состояния вашего приложения.
Если ваше приложение не видно и не активно, оно является кандидатом на App Nap. В таком случае, какая разница в вашем случае, если приложение уже дремлет? Если ваша цель состоит в том, чтобы быть энергоэффективной, приостановите сетевую активность, как только приложение не будет видно — так как никто не может видеть ваш индикатор состояния в любом случае!
Других решений пока нет …