Main Content

バックグラウンドでの関数の実行中におけるウェイト バーの更新

この例では、afterEach を使用して、バックグラウンドで実行されている関数の進行状況に合わせてウェイト バーを更新する方法を説明します。

ウェイト バー w を作成します。

w = waitbar(0,'Please wait ...');

for ループの反復回数 N を設定します。現在完了している反復の回数 0 と合計反復回数 N をウェイト バーの UserData プロパティに格納します。

N = 20;
w.UserData = [0 N];

for ループを反復回数 N で実行します。各反復で parfevalbackgroundPool を使用して、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

参考

|

関連するトピック