2014-03-12 59 views
1

我的應用程序似乎無法阻止Mac OS Mountain Lion上的系統睡眠。在Mac OS上預防睡眠

下面是它應該做的:

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"); 
    } 
} 

這是怎麼回事:

的桌面進程中正常工作。休眠系統喚醒,應用程序啓動,在日誌中打印「預防睡眠」,解析一些URL,但幾秒鐘後系統突然入睡。

發生了什麼事?

IOPMAssertionCreateWithName可能不適用於launchd在沒有用戶活動的系統上啓動的應用程序?

如何在應用程序正在處理時阻止系統進入睡眠狀態?

回答

0

如果未檢測到用戶活動,OS X 10.7將返回到睡眠狀態。您可以使用以下功能模擬用戶活動:

UpdateSystemActivity(OverallAct); 

請注意,這將打開屏幕。

+0

我正在使用10.9。自10.8以來,UpdateSystemActivity已棄用。替換爲IOPMAssertionCreateWithName。 它仍然是功能?由於這是一個私人項目,我至少試過它。 – DaneOzzo

+0

我可以確認它在10.9上仍然有效。只要有人使用Snow Leopard,Apple就無法將這個功能放到他們的圖書館中! – MrAsterisco

+0

猜你是對的。現在我正在使用IOPMAssertionCreateWithName和UpdateSystemActivity。但是,由於某種原因,系統仍然會睡覺。 每天早上我都會喚醒mac,檢查日誌並繼續解析。有任何想法嗎? – DaneOzzo