gpt4 book ai didi

objective-c - 防止 OS X 10.8 进入休眠状态

转载 作者:行者123 更新时间:2023-12-03 16:32:31 28 4
gpt4 key购买 nike

我需要停止 OS X 运行屏幕保护程序一段时间,然后再允许它。我找到了 IOKit 的函数 IOPMAssertionCreateWithName 和 IOPMAssertionRelease,但它们没有按预期工作。创建断言后,屏幕保护程序被阻止,没关系,但即使我释放断言后它仍然被阻止。这是我在 github 上的一些示例代码:https://github.com/silvansky/OSX-TestSleep - 主要方法是这样的:

- (IBAction)toggle:(id)sender
{
if (_assertionID == kIOPMNullAssertionID)
{
// toggle on
CFStringRef reasonForActivity= CFSTR("Test reason");

IOReturn success = IOPMAssertionCreateWithName(kIOPMAssertionTypePreventUserIdleDisplaySleep, kIOPMAssertionLevelOn, reasonForActivity, &_assertionID);
[self.statusField setStringValue:@"Assert ON"];
NSLog(@"*** lock: %d, success: %d", _assertionID, success);
}
else
{
// toggle off
IOReturn success = IOPMAssertionRelease(_assertionID);
[self.statusField setStringValue:@"Assert OFF"];
NSLog(@"*** unlock: %d. success: %d", _assertionID, success);
_assertionID = kIOPMNullAssertionID;
}
}

因此,当我第二次按“切换”按钮时,屏幕保护程序仍然被阻止。

有办法解决吗?我的系统是 OS X 10.8.2,Xcode 4.5.1。

最佳答案

嗯,我找到了这种行为的解释。

在我发布断言后,OS X 刚刚为 powerd(超时 300 秒)进程添加了一个断言。因此,屏幕保护程序会在我允许后 5-6 分钟内启动,而不是 1 分钟后启动(正如我在系统偏好设置中设置的那样)。我真的不知道为什么。

我已经更新了 github 上的源代码,因此它会打印出切换操作上的所有断言。

正如一些人所说,OS X 的这种奇怪行为出现在 10.8 中。

关于objective-c - 防止 OS X 10.8 进入休眠状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12783234/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com