使用 afterEach
和 afterAll
异步更新用户界面
此示例显示如何在计算完成时更新用户界面。当您使用 parfeval
将计算卸载给工作单元时,工作单元执行计算时所有用户界面都会做出响应。您可以使用 waitbar
来创建一个简单的用户界面。
每次计算完成后使用
afterEach
更新用户界面。所有计算完成后使用
afterAll
更新用户界面。
使用 waitbar
创建图形句柄,h
。当您使用 afterEach
或 afterAll
时,waitbar
函数会更新图形句柄。有关句柄对象的更多信息,请参阅 句柄对象行为。
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
中对应 true
对象的 State
属性为 Future
,则 f
匿名函数计算元素为 "finished"
的逻辑数组的平均值。
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);