バックグラウンドでの関数の実行中におけるウェイト バーの更新
この例では、afterEach
を使用して、バックグラウンドで実行されている関数の進行状況に合わせてウェイト バーを更新する方法を説明します。
ウェイト バー w
を作成します。
w = waitbar(0,'Please wait ...');
for
ループの反復回数 N
を設定します。現在完了している反復の回数 0
と合計反復回数 N
をウェイト バーの UserData
プロパティに格納します。
N = 20;
w.UserData = [0 N];
for
ループを反復回数 N
で実行します。各反復で parfeval
と backgroundPool
を使用して、pause
をバックグラウンドでランダムな秒数実行します。各 Future
オブジェクトを配列に格納します。
for i = 1:N delay = rand; f(i) = parfeval(backgroundPool,@pause,0,delay); end
補助関数 updateWaitbar
を使用して、各 Future
の完了後にウェイト バーを更新します。
afterEach(f,@(~)updateWaitbar(w),0);
delete
を使用して、すべての Future
オブジェクトの完了後にウェイト バーを閉じます。
afterAll(f,@(~)delete(w),0);
補助関数の定義
補助関数 updateWaitbar
を定義します。この関数は、UserData
プロパティの最初の要素をインクリメントし、そのベクトルを使用して進行状況を計算します。
function updateWaitbar(w) % Update a waitbar using the UserData property. % Check if the waitbar is a reference to a deleted object if isvalid(w) % Increment the number of completed iterations w.UserData(1) = w.UserData(1) + 1; % Calculate the progress progress = w.UserData(1) / w.UserData(2); % Update the waitbar waitbar(progress,w); end end