デルファイD10.X並列プログラミングライブラリPPLのTTask

デルファイD10.X並列プログラミングライブラリPPLシリーズTTask

RTLでのデルファイ(ランタイム)は、アプリケーションが効果的にクロスプラットフォームアプリケーションにおける並列タスクで複数のCPUランニングの電源を使用することができるように、並列プログラミングライブラリ(ライブラリのプログラミングPPL --parallel)を提供します。

使用TTaskは並行してITASKで複数のタスクを実行します

タスク説明

例TTaskは、スレッドを実行している他のタスクと並行して、単一のタスクまたはジョブのコンテンツを完成させることです。

TTaskクラス作成及びITASKインタフェース生成タスクインスタンスによって管理される、それはその継承クラスまたはインタフェースの他のタイプの例TTaskであってもよいITASKと互換性があります。

ジョイントタスク関連プロセスは、プロセスまたは他のスレッドが現在実行に関連する他の同様のタスクと並行して実行することができます。何のタスクは、時間によってターゲットプラットフォームを実行しているスレッドを決定するために、並行して実行するときに環境利用可能なリソースを実行します。

あなたは、Createコンストラクタを使用してタスクの並列実行に適し作成することができます。任務は、Startメソッドを呼び出した後、コンストラクタを使用して作成した後に実行されると考えられます。

WaitForAll、WaitForAnyおよび待機方法のITASKの実行は、実行中のタスクのいずれかまたは全てを待つために、明示的に呼び出したスレッドを一時停止するために使用されます。

任意のタスクを実行キャンセルするには、この方法は、関連するインスタンスをITASKキャンセルご連絡ください。

作成およびプロセス管理タスクを実行する方法を指示し実行するために、呼び出しに似て作成し、すぐにスタートを呼び出すことができます。

GetValueメソッドを呼び出して、次の計算された値を得るために必要ならば、次いで、及び、タスクの値を返すプログラムを必要とする後の時点のために、一般的な機能は、タスク未来を開始するために、他のタスクと並行して所望の値を決定するために用いることができます。

タスクの並列実行は、グローバルリソース使用可能な変数を使用する可能性の競合を避けるために、同期ツールSystem.SyncObjsユニットを使用する必要があります。

デモ

次は、アプリケーションがタスクを達成するための並列プログラミングライブラリ(PPL)を使用する方法を示しています。そこメインスレッドのタスクキューの管理であり、スレッドプールからスレッドを割り当てられたタスクを完了すること。スレッドプールは、デバイス利用可能なCPUの数に応じてスレッドの数を有しています。

プレゼンテーションを制御するために使用します

ここに画像を挿入説明
具体的なデモのビューをダウンロードすることができます。

2つの実行を実装

まず、私たちは、PPLライブラリを参照する必要があります。

uses
  System.Threading; // 需要引用PPL库

2つの実行プロセスを定義します。

    procedure NoTask; // 不使用任务的情况
    procedure ApplyTask; // 使用任务的情况

二つは、実装プロセスで書かれた、両方の実装プロセスは、長いプロセスになりますが、ボタンを押し、最初からプロセスの計算を示しています。それは3秒(アナログ処理時間を算出する)、次いで、0と10の間の乱数をスリープ。

procedure TForm5.ApplyTask;
var
  lValue: Integer;
begin
  Label1.Text := '使用Task:--';
  TTask.Run(
    procedure
    begin
      { 暂停一段时间,模拟需要计算的处理时间 }
      Sleep(3000);
      lValue := Random(10);
      TThread.Synchronize(nil,
        procedure
        begin
          Label1.Text := '使用Task:' + lValue.ToString;
        end);
    end);
end;

procedure TForm5.NoTask;
var
  lValue: Integer;
begin
  Label1.Text := '未用Task--';
  { 暂停一段时间,模拟需要计算的处理时间 }
  Sleep(3000);
  lValue := Random(10);
  Label1.Text := '未用Task:' + lValue.ToString;
end;

CheckBox1を選択したときにタスクを実行するには、ボタンイベントを作成し、選択されていないとき、通常の方法を使用して行います。

procedure TForm5.Button1Click(Sender: TObject);
begin
  if CheckBox1.IsChecked then
    ApplyTask
  else
    NoTask;
end;

デモンストレーション効果

ここに画像を挿入説明

プログラムを実行するには、プログレスバーの表示が自動的に増減が表示されます。
まず、CheckBox1を押してスタートボタンをチェックし、計算がプログレスバーが動きを復元するために表示されて完了するまで、画面上のプログレスバーが動かなく長時間の計算を開始しません。

第二に、私たちは、その後、スタートボタンCheckBox1を、プレスを選択して、結果を得るために3秒後に、運動の元の状態を維持するために、画面上のプログレスバーを起動し、評価を行うことは、インタフェースタスクの実行には影響を与えません。

特定の使用を参照してください

並列プログラミングライブラリ使用
TParallel.For並列ライブラリPPLプログラミングを
並列プログラミングライブラリPPLの先物

演示Demo

コードに対応するこのシリーズのダウンロードデモ。D10.3.2エディタを使用してください。
デルファイD10.Xは、並列プログラミングライブラリデモを使用しました


私のお店を訪問する歓迎:(https://shop63778938.taobao.com/)
ショップも他の態様は、技術サポート、カスタム開発をDELPHI提供しています。

今店に見えます

上記の情報は、あなたにとって有用な、次の行に、賞賛のコレクションを喜ば

公開された29元の記事 ウォン称賛44 ビュー60000 +

おすすめ

転載: blog.csdn.net/tanqth/article/details/104550281