Main Content

afterEachafterAll을 사용하여 사용자 인터페이스를 비동기식으로 업데이트하기

이 예제에서는 계산이 완료될 때마다 사용자 인터페이스를 업데이트하는 방법을 보여줍니다. parfeval을 사용하여 워커에 계산을 분담시키는 경우 워커가 이러한 계산을 수행하는 동안 모든 사용자 인터페이스가 즉각적으로 반응합니다. 이 예제에서는 waitbar를 사용하여 간단한 사용자 인터페이스를 만듭니다.

  • 각 계산이 완료된 후 사용자 인터페이스를 업데이트하려면 afterEach를 사용합니다.

  • 모든 계산이 완료된 후 사용자 인터페이스를 업데이트하려면 afterAll을 사용합니다.

waitbar를 사용하여 Figure 핸들 h를 만듭니다. afterEach 또는 afterAll을 사용하면 waitbar 함수가 Figure 핸들을 업데이트합니다. 핸들 객체에 대한 자세한 내용은 핸들 객체 동작 항목을 참조하십시오.

h = waitbar(0,'Waiting...');

parfeval을 사용하여 확률 행렬의 고유값에서 실수부를 계산합니다. 디폴트 기본 설정을 사용하면 병렬 풀이 아직 생성되지 않은 경우 parfeval이 자동으로 병렬 풀을 만듭니다.

for idx = 1:100
    f(idx) = parfeval(@(n) real(eig(randn(n))),1,5e2); 
end

afterEach를 사용하면 parfeval의 각 계산 결과마다 자동으로 함수를 호출할 수 있습니다. afterEach를 사용하여 각 Future가 완료된 후 각 출력 배열에서 가장 큰 값을 계산합니다.

maxFuture = afterEach(f,@max,1);

State 속성을 사용하여 Future의 상태를 가져올 수 있습니다. f에 있는 Future의 State 속성이 "finished"인 논리형 배열을 만듭니다. mean을 사용하여 완료된 Future의 소수 값을 계산합니다. 그 다음, 익명 함수 updateWaitbar를 만듭니다. 이 함수는 h의 대기 표시줄의 길이 소수 값을 완료된 Future의 소수 값으로 변경합니다.

updateWaitbar = @(~) waitbar(mean({f.State} == "finished"),h);

afterEachupdateWaitbar를 사용하여 maxFuture의 각 Future가 완료된 후 대기 표시줄의 길이 소수 값을 업데이트합니다. afterAlldelete를 사용하여 모든 계산이 완료된 후 대기 표시줄을 닫습니다.

updateWaitbarFutures = afterEach(f,updateWaitbar,0);
afterAll(updateWaitbarFutures,@(~) delete(h),0);

afterAllhistogram을 사용하여 모든 Future가 완료된 후 maxFuture의 결과를 히스토그램으로 표시합니다.

showsHistogramFuture = afterAll(maxFuture,@histogram,0);

참고 항목