afterEach
и afterAll
В этом примере показано, как обновить пользовательский интерфейс, когда расчеты завершаются. Когда вы разгружаете расчеты рабочим, использующим parfeval
, все пользовательские интерфейсы являются быстро реагирующими, в то время как рабочие выполняют эти расчеты. В этом примере вы используете waitbar
создать простой пользовательский интерфейс.
Используйте afterEach
чтобы обновить пользовательский интерфейс после, каждый расчет завершается.
Используйте afterAll
обновить пользовательский интерфейс после всех завершенных расчетов.
Используйте waitbar
создать указатель фигуры, h
. Когда вы используете afterEach
или afterAll
, waitbar
функционируйте обновляет указатель фигуры. Для получения дополнительной информации об объектах указателя, смотрите Поведение объекта Указателя.
h = waitbar(0,'Waiting...');
Используйте parfeval
вычислить действительную часть собственных значений случайных матриц. С настройками по умолчанию, parfeval
автоматически создает параллельный пул, если вы уже не создаетесь.
for idx = 1:100 f(idx) = parfeval(@(n) real(eig(randn(n))),1,5e2); end
Можно использовать afterEach
автоматически вызвать функции на каждый из результатов parfeval
расчеты. Используйте afterEach
чтобы вычислить самое большое значение в каждом из выходных массивов после, каждое будущее завершается.
maxFuture = afterEach(f,@max,1);
Можно использовать State
свойство получить состояние фьючерсов. Создайте логический массив где State
свойство фьючерсов в f
"finished"
. Используйте mean
вычислить часть законченных фьючерсов. Затем создайте анонимную функцию updateWaitbar
. Функция изменяет дробную длину панели ожидания h
к части законченных фьючерсов.
updateWaitbar = @(~) waitbar(mean({f.State} == "finished"),h);
Используйте afterEach
и updateWaitbar
обновить дробную длину панели ожидания после каждого будущего в maxFuture
завершается. Используйте afterAll
и delete
чтобы закрыть панель ожидания после, все расчеты завершены.
updateWaitbarFutures = afterEach(f,updateWaitbar,0); afterAll(updateWaitbarFutures,@(~) delete(h),0);
Используйте afterAll
и histogram
показать гистограмму результатов в maxFuture
после всех завершенных фьючерсов.
showsHistogramFuture = afterAll(maxFuture,@histogram,0);