Блокировка от пробуждения для Mac OS X
В Android есть блокировка, чтобы держать экран включенным. Итак, есть ли эквивалент Mac, чтобы держать экран включенным для ПК под управлением Mac OS X? Если это так, каковы API?
1 ответ
Да, в OS X это делается на уровне ОС через IOPMLib
подсистема управления питанием, которая также является подсистемой, которая контролирует AppNap
под OS X Mavericks.
Вот пример того, что мы делаем при выполнении тяжелых вычислений. В нашем случае мы сохраняем процессор в спящем режиме, но вы можете предотвратить его отключение с помощью kIOPMAssertionTypePreventUserIdleDisplaySleep
где мы использовали kIOPMAssertionTypePreventUserIdleSystemSleep
,
@property IOPMAssertionID currentPowerAssertion;
- (void)assertPowerRequirement:(NSString*)reason
{
// don't re-assert if we're already here
if (_currentPowerAssertion)
return;
IOPMAssertionID assertionID;
IOReturn success = IOPMAssertionCreateWithName(
kIOPMAssertionTypePreventUserIdleSystemSleep, // prevent CPU from going to sleep
kIOPMAssertionLevelOn, // we are turning this on
(__bridge CFStringRef)reason, // here's why
&assertionID); // reference for de-asserting
if (success == kIOReturnSuccess) {
_currentPowerAssertion = assertionID;
} else {
NSLog(@"Power assert failed");
}
}
- (void)deassertPowerRequirement
{
if (!_currentPowerAssertion)
return;
IOReturn success = IOPMAssertionRelease(_currentPowerAssertion);
if (success !=kIOReturnSuccess) {
NSLog(@"Power de-assert failed");
}
_currentPowerAssertion = 0;
}
В этом случае это в нашем делегате приложения, и у нас есть currentPowerAssertion
свойство отслеживать. Поскольку мы используем только одно состояние утверждения и только для одной цели, мы используем один механизм хранения. Тем не менее, вы можете утверждать несколько раз из разных частей вашей программы, если вы уравновешиваете утверждения с де-утверждениями и используете соответствующие reason
, Спецификации Apple требуют указания причины (не NULL) и предлагают, чтобы имя и задача приложения были описаны в утверждении.
Важно удостовериться, что вы де-утверждаете, когда вам это больше не нужно, хотя утверждения хранятся для каждого отдельного приложения, поэтому при выходе из вашего приложения они автоматически удаляются.
Чтобы добавить к этому, есть также инструменты командной строки, такие как встроенный
caffeinate
.