Main Content

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

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

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

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

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

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

parfeval을 사용하여 확률 행렬의 고유값에서 실수부를 계산합니다. 디폴트 기본 설정을 사용하면 병렬 풀이 아직 생성되지 않은 경우 parfeval이 자동으로 병렬 풀을 만듭니다. 효율성을 위해서 Future 객체로 구성된 배열을 사전할당합니다.

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

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

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

State 속성을 사용하여 Future의 상태를 가져올 수 있습니다. h의 대기 표시줄의 길이 소수 값을 실행이 완료된 Future 객체의 소수 값으로 업데이트하는 익명 함수를 정의합니다. updateWaitbar 익명 함수는 f에서 Future 객체의 State 속성이 "finished"인 경우 대응하는 요소가 true인 논리형 배열의 평균을 계산합니다.

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);

참고 항목