Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

afterEachafterAll を使用したユーザー インターフェイスの非同期更新

この例では、計算の完了時にユーザー インターフェイスを更新する方法を説明します。parfeval を使用して計算をワーカーにオフロードすると、ワーカーがこれらの計算を実行中にすべてのユーザー インターフェイスが応答可能な状態になります。この例では、waitbar を使用して単純なユーザー インターフェイスを作成します。

  • それぞれの計算が完了するたびにユーザー インターフェイスを更新するには、afterEach を使用します。

  • すべての計算が完了した後にユーザー インターフェイスを更新するには、afterAll を使用します。

waitbar を使用して Figure ハンドル h を作成します。afterEach または afterAll を使用すると、関数 waitbar は Figure ハンドルを更新します。ハンドル オブジェクトの詳細については、ハンドル オブジェクトの動作を参照してください。

h = waitbar(0,'Waiting...');

parfeval を使用して、乱数行列の固有値の実数部を計算します。parfeval は、並列プールが作成されていなければ、自動的に既定の基本設定で作成します。

for idx = 1:100
    f(idx) = parfeval(@(n) real(eig(randn(n))),1,5e2); 
end

afterEach を使用して、parfeval の各計算結果に対して自動的に関数を呼び出すことができます。各 future が完了するたびに、afterEach を使用して各出力配列内の最大値を計算します。

maxFuture = afterEach(f,@max,1);

State プロパティを使用して、future のステータスを取得できます。f の future の State プロパティが "finished" である logical 配列を作成します。mean を使用して、終了した future の割合を計算します。次に、無名関数 updateWaitbar を作成します。関数は、h のウェイト バーの割合の長さを、終了した future の割合に変更します。

updateWaitbar = @(~) waitbar(mean({f.State} == "finished"),h);

maxFuture の各 future が完了するたびに、afterEachupdateWaitbar を使用してウェイト バーの割合の長さを更新します。すべての計算が完了したら、afterAlldelete を使用してウェイト バーを閉じます。

updateWaitbarFutures = afterEach(f,updateWaitbar,0);
afterAll(updateWaitbarFutures,@(~) delete(h),0);

すべての future が完了したら、afterAllhistogram を使用して maxFuture の結果のヒストグラムを表示します。

showsHistogramFuture = afterAll(maxFuture,@histogram,0);

参考