afterEach
및 afterAll
을 사용하여 사용자 인터페이스를 비동기식으로 업데이트하기
이 예제에서는 계산이 완료될 때마다 사용자 인터페이스를 업데이트하는 방법을 보여줍니다. 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);
afterEach
및 updateWaitbar
를 사용하여 maxFuture
의 각 Future가 완료된 후 대기 표시줄의 길이 소수 값을 업데이트합니다. afterAll
및 delete
를 사용하여 모든 계산이 완료된 후 대기 표시줄을 닫습니다.
updateWaitbarFutures = afterEach(f,updateWaitbar,0); afterAll(updateWaitbarFutures,@(~) delete(h),0)
afterAll
및 histogram
을 사용하여 모든 Future가 완료된 후 maxFuture
의 결과를 히스토그램으로 표시합니다.
showsHistogramFuture = afterAll(maxFuture,@histogram,0);