함수가 백그라운드에서 실행되는 동안 대기 표시줄 업데이트하기
이 예제에서는 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