チュートリアル:並列プログラミング ライブラリのフューチャを使用する

提供: Appmethod Topics
移動先: 案内検索

並列プログラミング ライブラリ関連のチュートリアル への移動

このチュートリアルでは、並列プログラミング ライブラリ(PPL)フューチャの使い方を説明します。 フューチャとは、結果を返す TTask です。そのため、並列関数と見なすことができます。

このチュートリアルでは、2 つのボタンを持つ簡単なアプリケーションを作成します。1 つのボタンは計算を開始するためのもの、もう 1 つのボタンは値を返すためのものです。フューチャを使用することで、自分が要求したときにこの値を取得することができます。その時にまだ計算が済んでいなければ、済むまでブロックされます。

プロジェクトの作成

新規プロジェクトを作成します。

  • Object Pascal の場合は、[ファイル|新規作成|マルチデバイス アプリケーション - Object Pascal|空のアプリケーション]を選択します。
  • C++ の場合は、[ファイル|新規作成|マルチデバイス アプリケーション - C++|空のアプリケーション]を選択します。

コンポーネントの追加

  1. フォームに TButton コンポーネントを 2 つ追加します。
  2. 最初のボタンの Text プロパティを「Start Future String」に設定します。このボタンによりフューチャが開始されます。
  3. もう 1 つのボタンの Text プロパティを「Request Future String」に設定します。このボタンは結果を要求するためのものです。

TTask.Future 機能の実装

まず、[Start Future String]ボタンおよび[Request Future String]ボタンの OnClick イベントのイベント ハンドラを実装します。 次のコードを記述します。

Object Pascal:

Object Pascal では、関数が無名メソッドとして TTask.Future に渡されます。

procedure TForm1.Button1Click(Sender: TObject);
begin
  FutureString:= TTask.Future<string>(
    function:string
    begin
      {Some calculation that takes time}
      Sleep(3000);
      Result:='Hello ' + Random(42).ToString;
  end);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  Button2.Text := FutureString.Value;
end;
C++:
void __fastcall TForm1::Button1Click(TObject *Sender){
  FutureString = TTask::Future<System::String>(0, this->FutureHandler);
}

System::String __fastcall TForm1::FutureHandler(TObject* Sender){
  // Some calculation that takes time
  Sleep(3000);
  return System::String str = System::String().sprintf(L"Hello %d", Random(42));
}
void __fastcall TForm1::Button2Click(TObject *Sender){
  Button2->Text = FutureString->Value;
}

次に、以下の宣言を追加します。

  public
    { Public declarations }
    FutureString: IFuture<string>;
C++:
public:	 // User declarations
	System::DelphiInterface<IFuture__1<System::String> > FutureString;
	System::String __fastcall FutureHandler(TObject* Sender);

最後に、必要なライブラリもコードに含める必要があります。

Object Pascal の場合:

Object Pascal アプリケーションの場合、次のユニットが uses 句に含まれていなければ追加します。

uses
  System.Threading;
C++:

C++ アプリケーションの場合、プロジェクト ヘッダー ファイルに以下の include 演算子を追加します。

#include <System.Threading.hpp>

アプリケーションの実行

この時点で、アプリケーションを実行することができます。

  • F9 キーを押すか、[実行|実行を選択します。
    Futures parallel1.png Futures parallel2.png

[Start Future String]を押すと手続きが実行され、[Request Future String]を押すと結果を取得できます。値がまだ計算されていない場合には、計算が済むのを待たされることがわかります。済んでいれば、結果はすぐに表示されます。

関連項目