Android Mac 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来防

在安卓系统中,有一个唤醒锁来保持屏幕打开。那么,对于一台运行MacOSX的电脑来说,有没有一款Mac电脑可以让屏幕保持打开状态呢?如果是这种情况,API是什么?

是的,在OS X中,它是通过电源管理子系统
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