我的应用程序似乎无法阻止Mac OS Mountain Lion上的系统睡眠。
以下是它应该做的事情:
使用launchd进程在特定时间启动Cocoa应用程序。使用IOPMAssertionCreateWithName在启动应用程序时完成防止系统睡眠。该应用程序只有一个(隐藏的)WebView,调用几个URL,解析内容,将结果发送到Web服务器,退出。
这是我的防止睡眠的代码:
- (void)preventSleep
{
CFStringRef reasonForActivity= CFSTR("Content parsing");
IOReturn success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep,
kIOPMAssertionLevelOn, reasonForActivity, &self.assertionID);
if (success == kIOReturnSuccess)
{
Log([NSColor orangeColor], @"Prevent sleep\n");
}
}
这是发生的事情:
launchd进程运行正常。睡眠系统醒来,应用程序启动,打印"防止睡眠"在我的日志中,解析一些URL,但几秒后系统突然停止睡眠。
发生了什么事?
IOPMAssertionCreateWithName可能无法使用launchd在没有用户活动的系统上启动的应用程序吗?
我可以做些什么来阻止系统在我的应用程序处理时睡眠?
答案 0 :(得分:0)
如果未检测到用户活动,OS X 10.7将返回休眠状态。您可以使用以下函数模拟用户活动:
UpdateSystemActivity(OverallAct);
请注意,这将打开屏幕。