このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
afterEach
と afterAll
を使用したユーザー インターフェイスの非同期更新
この例では、計算の完了時にユーザー インターフェイスを更新する方法を説明します。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 が完了するたびに、afterEach
と updateWaitbar
を使用してウェイト バーの割合の長さを更新します。すべての計算が完了したら、afterAll
と delete
を使用してウェイト バーを閉じます。
updateWaitbarFutures = afterEach(f,updateWaitbar,0); afterAll(updateWaitbarFutures,@(~) delete(h),0);
すべての future が完了したら、afterAll
と histogram
を使用して maxFuture
の結果のヒストグラムを表示します。
showsHistogramFuture = afterAll(maxFuture,@histogram,0);