В этом примере показано, как использовать 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