这个脚本生成一个等待条或等待消息,包括(1)完成百分比;(二)使用时间;(3) parfor或其他类型循环的估计剩余时间。该脚本使用“parallel.pool.”DataQueue”,用于从工作人员收集信息。
的例子。M提供了一个例子。基本上,我们需要在循环之前构造对象,在循环中向对象发送消息,并在循环之后销毁对象。
%的例子:
N = 100000;
WaitMessage = parfor_wait(N, 'Waitbar', true);
parfor i = 1: N
WaitMessage.Send;
暂停(0.002);
结束
WaitMessage。摧毁
Yun Pu(2021)。为Parfor Waitbar(//www.tatmou.com/matlabcentral/fileexchange/71083-waitbar-for-parfor), MATLAB中央文件交换。检索.
出色的工作!非常感谢。
太棒了!我给出4而不是5的唯一原因是我发现在我的申请中使用的估计剩余时间不是很准确。
你好,Yun Pu,这是一个很好的函数,但是在parfor循环期间,当我喜欢等待栏的“取消”按钮时,它会显示警告。
更多细节,MATLAB显示:
"警告: 第二个参数必须为消息字符向量或现有进度条的句柄。 "
你知道怎么修吗?
谢谢你真诚!
Yun Pu干得好,我对它做了一点修改,以HH小时MM分钟SS秒的格式显示时间:
在代码中,输入:
抽搐;
WaitMessage = parfor_wait(“Waitbar”,的确,ReportInterval, 1);
parfor i = 1: N
...
WaitMessage.Send;
结束
在函数中,替换以下行:
53行:Obj。WaitbarHandle = waitbar(0,[num2str(0), '% Please wait'], 'Resize', true','Units', '厘米','Position', [4,3,9.68,2.8]);
90行:waitbar (Obj.NumMessage / Obj。TotalMessage Obj。WaitbarHandle,{:完成,num2str (Obj.NumMessage / Obj.TotalMessage * 100, ' % .2f '), '% '],[' 在“num2str(地板(UsedTime_now / 3600),“% .2f”),“小时”,num2str(地板(rem (UsedTime_now, 3600) / 60),“% .2f”),“敏和“,num2str (60 * ((rem (UsedTime_now, 3600) / 60)地板(rem (UsedTime_now, 3600) / 60)),“% .2f”),“交会”],['估计所需的时间:', num2str(floor(estimatedtimenneeded,3600)/60), '%.2f'), num2str(floor(rem(estimatedtimenneeded,3600)/60)-floor(rem(estimatedtimenneeded,3600)/60), '%.2f'), ' sec']});