Main Content

함수가 백그라운드에서 실행되는 동안 대기 표시줄 업데이트하기

이 예제에서는 afterEach를 사용하여, 백그라운드에서 실행되는 함수의 진행률을 대기 표시줄에 업데이트하는 방법을 보여줍니다.

대기 표시줄 w를 만듭니다.

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

for 루프의 반복 횟수 N을 설정합니다. 현재 완료된 반복 횟수 0과 총 반복 횟수 N을 대기 표시줄의 UserData 속성에 저장합니다.

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

N회 반복으로 for 루프를 실행합니다. 각 반복마다 parfevalbackgroundPool을 사용하여 백그라운드에서 임의의 시간(단위: 초) 동안 pause를 실행합니다. 각 Future 객체를 배열에 저장합니다.

for i = 1:N
    delay = rand;
    f(i) = parfeval(backgroundPool,@pause,0,delay);
end

Future가 완료되면 헬퍼 함수 updateWaitbar를 사용하여 대기 표시줄을 업데이트합니다.

afterEach(f,@(~)updateWaitbar(w),0);

모든 Future 객체가 완료되면 delete를 사용하여 대기 표시줄을 닫습니다.

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

참고 항목

|

관련 항목