В этом примере показано, как использовать afterEach обновить панель ожидания с прогрессом функций, запускающихся в фоновом режиме.
Создайте панель ожидания, w.
w = waitbar(0,'Please wait ...');
Определите номер итераций для вашего for- цикл, N. Сохраните текущее количество завершенных итераций, 0, и общее количество итераций, N, в UserData свойство панели ожидания.
N =
20;
w.UserData = [0 Н];Запустите for- цикл с N итерации. В каждой итерации используйте parfeval и backgroundPool запускать pause в фоновом режиме для случайного числа секунд. Сохраните каждый Future объект в массиве.
for i = 1:N delay = rand; f(i) = parfeval(backgroundPool,@pause,0,delay); end
Используйте функцию помощника updateWaitbar обновить waitbar после каждого Future концы.
afterEach(f,@(~)updateWaitbar(w),0);
Используйте delete закрыть панель ожидания после всего Future конец объектов.
afterAll(f,@(~)delete(w),0);
Задайте функцию помощника updateWaitbar. Функция постепенно увеличивает первый элемент UserData свойство, затем использует вектор, чтобы вычислить прогресс.
function updateWaitbar(w) % Update a waitbar using the UserData property. % Check if the waitbar is a reference to a deleted object if isvalid(w) % Increment the number of completed iterations w.UserData(1) = w.UserData(1) + 1; % Calculate the progress progress = w.UserData(1) / w.UserData(2); % Update the waitbar waitbar(progress,w); end end