可能重复:
如何以编程方式阻止Mac进入睡眠状态?
当前版本的OS X(10.7)在应用程序或进程运行时防止睡眠的正确方法是什么?
特别是,IOCancelPowerChange仍然(或曾经)曾为此目的服务吗?我打电话IOCancelPowerChange回应kIOMessageCanSystemSleep,但这并没有成功.
我想以编程方式从睡眠中唤醒系统,有什么办法可以做到这一点吗?
我已阅读以下链接:http: //developer.apple.com/mac/library/qa/qa2004/qa1340.html
这只谈到获得通知,但不确定是否有办法唤醒系统睡眠?
我很感激信息的一些线索......
更新:
根据我尝试使用IOPMSchedulePowerEvent的建议
我用过的代码:
NSCalendarDate *timeIntervalSinceNow = [NSCalendarDate dateWithTimeIntervalSinceNow:40];
IOReturn result = IOPMSchedulePowerEvent ((CFDateRef)timeIntervalSinceNow, NULL, CFSTR(kIOPMAutoWake));
Run Code Online (Sandbox Code Playgroud)
结果:
如果盖子关闭,它在MacBook中失败
我做错了什么或任何解决方案?
我正在编写一个Qt应用程序来执行一些繁重的计算,但是在Mac上(可能也在Windows上但我目前无法检查这个),一旦计算机进入休眠模式,执行就会停止.
即使屏幕转到屏幕保护程序或空白,我想要一种继续执行的方法.显然,你可以要求用户改变他/她的能量设置,但这远非理想的解决方案.有没有正确的方法呢?
我正在将Carbon应用程序转换为Cocoa应用程序,但找不到以下产品的Cocoa等效项:
UpdateSystemActivity(UsrActivity);
Run Code Online (Sandbox Code Playgroud)
那里的Mac人士是否愿意为我指明正确的方向?谢谢。
更新:我正在构建64位。构建32bit可以正常工作,但是当我针对64bit进行构建时,在此范围内,UpdateSystemActivity(及其他)未声明符号错误。
UPDATE2:我要导入以下内容:
#import <Cocoa/Cocoa.h>
#import <Carbon/Carbon.h>
#import <OpenGL/CGLMacro.h>
Run Code Online (Sandbox Code Playgroud)
构建64bit时是否还需要导入其他内容?
UPDATE3:添加#import <CoreServices/CoreServices.h>无济于事。我仍然收到编译器错误,告诉我在此范围内未声明UpdateSystemActivity和UsrActivity。
UPDATE4:好的,在OSServices / Power.h上找不到文件。我正在针对10.5 SDK进行构建,并显示了一个快速搜索:
$ pwd
/Developer/SDKs
$ find . -name Power.h
./MacOSX10.3.9.sdk/Developer/Headers/CFMCarbon/OSServices/Power.h
./MacOSX10.3.9.sdk/Developer/Headers/CFMCarbon/Power.h
./MacOSX10.3.9.sdk/Developer/Headers/FlatCarbon/Power.h
./MacOSX10.3.9.sdk/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/Headers/Power.h
./MacOSX10.4u.sdk/Developer/Headers/CFMCarbon/OSServices/Power.h
./MacOSX10.4u.sdk/Developer/Headers/CFMCarbon/Power.h
./MacOSX10.4u.sdk/Developer/Headers/FlatCarbon/Power.h
./MacOSX10.4u.sdk/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/Headers/Power.h
./MacOSX10.5.sdk/Developer/Headers/FlatCarbon/Power.h
./MacOSX10.5.sdk/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/Headers/Power.h
Run Code Online (Sandbox Code Playgroud)
但是我得到:
Mac.mm:6:29: error: OSServices/Power.h: No such file or directory
Mac.mm:6:29: error: OSServices/Power.h: No such file or directory
Run Code Online (Sandbox Code Playgroud) 我已经设法让显示器立即进入睡眠状态
pmset displaysleepnow
Run Code Online (Sandbox Code Playgroud)
在终端,但是为了唤醒我才发现的显示器
pmset schedule wake "12/24/2009 00:00:00"
Run Code Online (Sandbox Code Playgroud)
如果我尝试安排比现在至少10秒更早的任何事情,它就无法工作.
有没有办法以编程方式唤醒Cocoa中的显示?有人建议IOPMAssertionDeclareUserActivity但我找不到任何关于此的例子,所以我很挣扎.
顺便说一句,我使用Swift,但也欢迎使用Objective C代码.