함수가 백그라운드에서 실행되는 동안 대기 표시줄 업데이트하기
이 예제에서는 afterEach를 사용하여, 백그라운드에서 실행되는 함수의 진행률을 대기 표시줄에 업데이트하는 방법을 보여줍니다.
대기 표시줄 w를 만듭니다.
w = waitbar(0,'Please wait ...');
for 루프의 반복 횟수 N을 설정합니다. 현재 완료된 반복 횟수 0과 총 반복 횟수 N을 대기 표시줄의 UserData 속성에 저장합니다.
N =
20;
w.UserData = [0 N];N회 반복으로 for 루프를 실행합니다. 각 반복마다 parfeval과 backgroundPool을 사용하여 백그라운드에서 임의의 시간(단위: 초) 동안 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