在Mac OS上防止睡眠

时间:2014-03-12 11:04:34

标签: macos cocoa sleep launchd

我的应用程序似乎无法阻止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在没有用户活动的系统上启动的应用程序吗?

我可以做些什么来阻止系统在我的应用程序处理时睡眠?

1 个答案:

答案 0 :(得分:0)

如果未检测到用户活动,OS X 10.7将返回休眠状态。您可以使用以下函数模拟用户活动:

UpdateSystemActivity(OverallAct);

请注意,这将打开屏幕。