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