並列プログラミング ライブラリの TTask.IFuture の使用

提供: RAD Studio
移動先: 案内検索

並列プログラミング ライブラリの使用 への移動


Future オブジェクトは、IFuture インターフェイスを実装するオブジェクトで、関数の結果に非同期にアクセスするためのメカニズムを定義します。

future オブジェクトを作成し使用するには:

  1. TTask.Future<T> を呼び出し、future オブジェクトを作成します。指定された関数が、バックグラウンドで実行を開始します。
  2. future オブジェクトの Value プロパティをいつでも読み込み、指定された関数の結果を取得します。バックグラウンドでの関数の実行がまだ完了していない場合には、Value が関数が完了するまでプログラムの実行をブロックします。

例:

Delphi:

FutureObject := TTask.Future<Integer>(function: Integer
    begin
        Sleep(3000);
        Result := 16;
    end);
// …
MyValue := FutureObject.Value;

C++:

Clang 拡張 C++ コンパイラを使用している場合、ラムダ式を使用することができます:

auto FutureObject = TTask::Future<int>([&]()-> int {
    Sleep(3000);
    return 16;
});
// …
int MyValue = FutureObject->Value;

C++ コンパイラの場合、TProc サブクラスを宣言し、そのインスタンスを _di_TProc としてキャストして使用します:

class TCppTask : public TCppInterfacedObject<TFunc<int> > {
public:
    int __fastcall Invoke() {
        Sleep(3000);
        return 16;
    }
};
// …
System::DelphiInterface<IFuture__1<int> > FutureObject = TTask::Future<int>(new TCppTask());
// …
int MyValue = FutureObject->Value;

関連項目