Macos 使用beginActivityWithOptions禁用应用程序Nap

Macos 使用beginActivityWithOptions禁用应用程序Nap,macos,delphi,delphi-xe2,firemonkey,Macos,Delphi,Delphi Xe2,Firemonkey,我正在尝试将新的OS X 10.9(Mavericks)方法beginActivityWithOptions添加到FireMonkey(Delphi XE2)中的NSProcessInfo接口(TNSProcessInfo)中 这个功能似乎起作用了。它返回一个对象,但是,它不会为应用程序禁用应用程序Nap。我正在使用活动监视器的“能量”选项卡监视应用程序的“午睡”状态 我把下面的代码添加到MaCAPI .Fask.Pass/Cult>: const NSActivityBackground

我正在尝试将新的OS X 10.9(Mavericks)方法
beginActivityWithOptions
添加到FireMonkey(Delphi XE2)中的
NSProcessInfo
接口(
TNSProcessInfo
)中

这个功能似乎起作用了。它返回一个对象,但是,它不会为应用程序禁用应用程序Nap。我正在使用活动监视器的“能量”选项卡监视应用程序的“午睡”状态

我把下面的代码添加到MaCAPI .Fask.Pass/Cult>:

const
  NSActivityBackground = 255;
  NSActivityIdleSystemSleepDisabled = 1048576;
  NSActivityUserInitiated = NSActivityIdleSystemSleepDisabled or 16777215;
  NSActivityLatencyCritical = 1095216660480;

type
  NSActivityOptions = UInt64;

  NSProcessInfo = interface(NSObject)
    ['{B96935F6-3809-4A49-AD4F-CBBAB0F2C961}']
    ...
    // Added following
    function beginActivityWithOptions(options: NSActivityOptions; reason: NSString): NSObject; cdecl;
    ...
  end;
我这样称呼它:

var
  obj: NSObject;
  reason: NSString;
  options: NSActivityOptions;
begin
  reason := NSSTR('...');
  options := NSActivityUserInitiated or NSActivityLatencyCritical;
  obj := TNSProcessInfo.Wrap(TNSProcessInfo.OCClass.processInfo).beginActivityWithOptions(options, reason);
end;

我已经尝试了选项标志的各种组合,但它并没有禁用应用程序Nap。有什么想法吗?您认为我的实现有什么问题吗?

谢谢!我一直在处理同一个与应用程序Nap相关的问题,但使用NSProcessInfo DisableAutomaticatenation和EnableAutomaticatenation却没有成功。我试过你使用beginActivityWithOptions的想法,现在效果很好。我相信您唯一的错误是需要创建一个NSProcessInfo实例,该实例分配给类中的字段。按照您的操作方式,当TNSProcessInfo.Wrap(TNSProcessInfo.OCClass.processInfo)超出范围时,您对活动所做的修改将丢失

在我的测试中,我用

TForm46 = class(TForm)
  procedure FormCreate(Sender: TObject);
private
  ProcessInfo: NSProcessInfo;
public
end;
然后在表单中创建

procedure TForm46.FormCreate(Sender: TObject);
begin
  ProcessInfo := TNSProcessInfo.Wrap(TNSProcessInfo.OCClass.processInfo);
  ProcessInfo.beginActivityWithOptions(NSActivityUserInitiated or NSActivityLatencyCritical, NSSTR('Good Reason'));
end;
然后我将它部署到我的mac上并运行它,然后用活动监视器监视它。它似乎能像预期的那样工作,应用程序一次保持几个小时处于应用程序无状态


顺便说一句,通过PAServer运行应用程序似乎愚弄了整个应用程序Nap。我必须部署,然后在Mac上本地运行。

不需要实例变量。显然,诀窍是在
FormCreate
中运行它。谁知道编译器中发生了什么?:)