Android Mac OS X的唤醒锁
在安卓系统中,有一个唤醒锁来保持屏幕打开。那么,对于一台运行MacOSX的电脑来说,有没有一款Mac电脑可以让屏幕保持打开状态呢?如果是这种情况,API是什么?是的,在OS X中,它是通过电源管理子系统Android Mac OS X的唤醒锁,android,macos,wakelock,Android,Macos,Wakelock,在安卓系统中,有一个唤醒锁来保持屏幕打开。那么,对于一台运行MacOSX的电脑来说,有没有一款Mac电脑可以让屏幕保持打开状态呢?如果是这种情况,API是什么?是的,在OS X中,它是通过电源管理子系统IOPMLib在OS级别完成的,电源管理子系统也是在OS X Mavericks下控制AppNap的子系统 下面是一个我们在执行大量计算时所做的示例。在我们的例子中,我们防止CPU休眠,但是您可以通过使用kiopmassertiontypeprovetuseridledisplayssleep来防
IOPMLib
在OS级别完成的,电源管理子系统也是在OS X Mavericks下控制AppNap
的子系统
下面是一个我们在执行大量计算时所做的示例。在我们的例子中,我们防止CPU休眠,但是您可以通过使用kiopmassertiontypeprovetuseridledisplayssleep
来防止显示器休眠,我们使用了kiopmassertiontypeprovetuseridlesystemsleep
@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
。苹果的规范要求给出一个理由(非空),并建议在断言中描述应用程序名称和任务
重要的是确保在不再需要时取消断言,尽管断言是基于每个应用保留的,因此当应用退出时,它们将自动取消断言。是的,在OS X中,它是通过电源管理子系统
IOPMLib
在操作系统级别完成的,它也是在OSX Mavericks下控制AppNap的子系统
下面是一个我们在执行大量计算时所做的示例。在我们的例子中,我们防止CPU休眠,但是您可以通过使用kiopmassertiontypeprovetuseridledisplayssleep
来防止显示器休眠,我们使用了kiopmassertiontypeprovetuseridlesystemsleep
@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
。苹果的规范要求给出一个理由(非空),并建议在断言中描述应用程序名称和任务
重要的是确保在不再需要时取消断言,尽管断言是基于每个应用保留的,因此当应用退出时,它们将自动取消断言。是的,在OS X中,它是通过电源管理子系统
IOPMLib
在操作系统级别完成的,它也是在OSX Mavericks下控制AppNap的子系统
下面是一个我们在执行大量计算时所做的示例。在我们的例子中,我们防止CPU休眠,但是您可以通过使用kiopmassertiontypeprovetuseridledisplayssleep
来防止显示器休眠,我们使用了kiopmassertiontypeprovetuseridlesystemsleep
@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
。苹果的规范要求给出一个理由(非空),并建议在断言中描述应用程序名称和任务
重要的是确保在不再需要时取消断言,尽管断言是基于每个应用保留的,因此当应用退出时,它们将自动取消断言。是的,在OS X中,它是通过电源管理子系统
IOPMLib
在操作系统级别完成的,它也是在OSX Mavericks下控制AppNap的子系统
下面是一个我们在执行大量计算时所做的示例。在我们的例子中,我们防止CPU休眠,但是您可以通过使用kiopmassertiontypeprovetuseridledisplayssleep
来防止显示器休眠,我们使用了kiopmassertiontypeprovetuseridlesystemsleep
@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
。苹果的规范要求给出一个理由(非空),并建议在断言中描述应用程序名称和任务
重要的是要确保在不再需要时取消断言,尽管断言是基于每个应用保留的,因此当你的应用退出时,它们将自动取消断言。要添加到声明中,还有命令行工具,如内置的
caffeinate
添加到声明中,还有一些命令行工具,比如内置的caffeinate
添加到它,还有一些命令行工具,比如内置的caffeinate
添加到它,还有一些命令行工具,比如内置的caffeinate