我正在将Carbon应用转换为Cocoa应用,我无法找到Cocoa的等价物:
UpdateSystemActivity(UsrActivity);
那里的任何Mac人都在关注我指向正确的方向吗?感谢。
更新:我正在构建64位。构建32位工作正常,但是当我为64位构建时,我在UpdateSystemActivity(和其他)的范围错误中没有声明符号。
UPDATE2 :我正在导入以下内容:
#import <Cocoa/Cocoa.h>
#import <Carbon/Carbon.h>
#import <OpenGL/CGLMacro.h>
构建64位时还需要导入一些其他东西吗?
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
但我得到了:
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
答案 0 :(得分:4)
在OS X 10.6及更高版本中,IOKit可用于禁用睡眠。当你想要禁用睡眠时创建一个IOPMAssertion,并在你想再次允许睡眠时将其销毁。
#import <IOKit/pwr_mgt/IOPMLib.h>
// kIOPMAssertionTypeNoDisplaySleep prevents display sleep,
// kIOPMAssertionTypeNoIdleSleep prevents idle sleep
// reasonForActivity is a descriptive string why sleep is disabled
CFStringRef* reasonForActivity= CFSTR("Describe Activity Type");
IOPMAssertionID assertionID;
IOReturn success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, reasonForActivity, &assertionID);
if (success == kIOReturnSuccess)
{
//Add the work you need to do without the system sleeping here.
success = IOPMAssertionRelease(assertionID);
//The system will be able to sleep again.
}
更多信息:https://developer.apple.com/library/mac/qa/qa1340/_index.html
答案 1 :(得分:2)
如果定义了__LP64__,此处的问题似乎是OSServices.h中排除Power.h的行。在10.5 UpdateSystemActivity上构建64位确实未定义。
好消息是符号确实存在于CoreServices.framework中。有两种方法可以访问它。
我没有SnowLeopard的副本,但接下来要做的就是检查它是否固定在那里。如果不是,请提交RADAR,因为这显然是一个SDK错误。
答案 2 :(得分:1)
您仍然可以在Cocoa应用程序中调用UpdateSystemActivity
- 它尚未被标记为已弃用。
API的文档指定导入CoreServices/CoreServices.h
以获取API - 但是通过标题搜索(特别是在OSServices/OSServices.h
中)表明该文件在64位环境中被省略。尽管如此,有Power.h
(其中UpdateSystemActivity
已定义)的部分已关闭64位,而UpdateSystemActivity
不是其中之一。
鉴于此,请直接尝试#import <OSServices/Power.h>
,看看是否有效。 (您必须在项目中包含CoreServices框架,以便找到标题。)