3

FireMonkey (Delphi XE2)のインターフェイス ( ) に新しい OS X 10.9 (Mavericks) メソッドbeginActivityWithOptionsmethodを追加しようとしています。NSProcessInfoTNSProcessInfo

機能は動作するようです。オブジェクトを返しますが、アプリケーションの App Nap を無効にするわけではありません。App Nap の状態を監視するために、Activity Monitor の Energy タブを使用しています。

に次のコードを追加しましたMacapi.Foundation.pas

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;

オプション フラグのさまざまな組み合わせを試しましたが、App Nap は無効になりません。何か案は?私の実装に何か問題がありますか?

4

2 に答える 2

3

ありがとう!私はこの同じ App Nap 関連の問題に取り組んできましたが、NSProcessInfo disableAutomaticTermination と enableAutomaticTermination を使用していましたが、成功しませんでした。beginActivityWithOptions を使用するというあなたのアイデアを試してみましたが、今では正常に動作します。あなたの唯一の間違いは、クラスのフィールドに割り当てられた NSProcessInfo のインスタンスを作成する必要があることだと思います。TNSProcessInfo.Wrap(TNSProcessInfo.OCClass.processInfo) が範囲外になると、アクティビティに加えた変更が失われます。

私のテストでは、フォームを作成しました

TForm46 = class(TForm)
  procedure FormCreate(Sender: TObject);
private
  ProcessInfo: NSProcessInfo;
public
end;

次に FormCreate で

procedure TForm46.FormCreate(Sender: TObject);
begin
  ProcessInfo := TNSProcessInfo.Wrap(TNSProcessInfo.OCClass.processInfo);
  ProcessInfo.beginActivityWithOptions(NSActivityUserInitiated or NSActivityLatencyCritical, NSSTR('Good Reason'));
end;

次に、それを自分の Mac にデプロイして実行し、Activity Monitor で監視しました。アプリが一度に何時間も App Nap No 状態のままであると、期待どおりに動作するようです。

ところで、PAServer を介してアプリを実行すると、App Nap 全体がだまされるようです。展開してから、Mac 上でローカルに実行する必要がありました。

于 2013-10-30T21:17:25.180 に答える