並列プログラミング ライブラリの TTask.IFuture の使用
並列プログラミング ライブラリの使用 への移動
Future オブジェクトは、IFuture インターフェイスを実装するオブジェクトで、関数の結果に非同期にアクセスするためのメカニズムを定義します。
future オブジェクトを作成し使用するには:
- TTask.Future<T> を呼び出し、future オブジェクトを作成します。指定された関数が、バックグラウンドで実行を開始します。
- 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;