数学建模社区-数学中国

标题: 查看matlab程序运行进度 [打印本页]

作者: 墨雨金岚    时间: 2012-8-4 15:09
标题: 查看matlab程序运行进度
关于matlab中的waitbar(用于显示程序运行的进度)2 Z7 [( I/ e, f& p
应用1:
( [+ N# N- I- @) f% u. d7 g2 Wh = waitbar(x,'message'); %其中x必须为0到1之间的数,message为显示的信息,其实这个x大于1也可以啊,但是进度条总在满的状态,x是多少就对应进度条显示的比例是多少
$ l" V/ q* p0 D. _" ^  ]3 @  j3 @9 c举例: hwait=waitbar(0,'请等待>>>>>>>>'); %这个0显示的是进度条的位置,因为是0,就在起始位置,还有就是这个hwait就是这个waitbar函数的句柄
- d, `, [$ F, `- Q- c$ m得到:! c1 d, M0 M  C! q

- r+ ]& ?( `9 u  }应用2:4 u* c* n0 ~4 B! t* H6 q+ j
waitbar(x,h,'updated message'); % x为显示的进度,必须在0到1之间;h为所建立的waitbar的句柄,updated message为实时显示的信息,此语句经常地用于for循环中2 r5 O& t" M. Z* f6 @# O4 N  s* ?
举例:
" I) b6 n9 f7 F# h3 V% \& \6 bsteps=100;
" ]3 P  c3 l3 r( |2 Uhwait=waitbar(0,'请等待>>>>>>>>');
0 r# ?% F2 B$ O. hfor k=1:steps9 B; W' Y7 `8 d1 c/ S, `2 s- N
if steps-k<=53 }/ z2 q% j- F
waitbar(k/steps,hwait,'即将完成'); %因为k/steps在逐步增大,所有进度条在往右走,另外,如果这个hwait不加上的话,会显示n多个进度条窗口,让你关闭不过来啊,加上之后就只显示一个了
$ V' L# R! r2 I6 }+ Bpause(0.05); %延时一下啊 否则太快看不出来变化,一般有个0.01就能看出变化,但还是比较快的
4 U4 G( D" w4 V9 G' m' gelse
5 {* S$ B( u! [% P- Gstr=['正在运行中',num2str(k),'%']; %用于显示如下图中“正在运行中46%”等比例数据0 [( P. I5 ?6 G5 V6 f
waitbar(k/steps,hwait,str);6 x" L& r# h$ F% C0 K+ K& ~
pause(0.05); %pause(n)函数是程序停止n秒后继续,n可以使分数或小数。函数的分辨率根据平台而定,大多数平台都能满足0.01秒的精度。
1 i$ D1 C( n/ v% s; C5 s; qend* n+ k: Y  B5 B0 v- [, |) ~
end1 v% P7 X8 n- g3 U  y
close(hwait); % 注意必须添加close函数,也就是说运行完成后让此进度条消失. ~. x' z1 `2 C$ V+ K, I
结果如下所示:7 l9 r; L+ k2 z! A
显示正在运行中:
. }/ w: @' }9 b% c) c" ~
7 Q2 \$ y, _4 d显示即将完成:
! A$ m8 A2 ?: a. | ) r6 ~+ ^) L% t: M% f" d$ J
上例子中,当循环步骤刚好是100,但是如果循环不是100的时候,要作小小的改变,举例如下:2 I' P  w- s, u, a7 h# `1 i
steps=150;8 X' c  Z7 \8 k' U: g+ e' x
hwait=waitbar(0,'请等待>>>>>>>>');
1 {" i  p$ Z- u. P7 b' E" v( n+ x3 sstep=steps/100; %这里step=1.5$ ~$ {3 u4 m% d, R! {
for k=1:steps0 V0 l% D! ^# M0 ]0 H  \: J
if steps-k<=5
  n6 Y- D3 u" z, Bwaitbar(k/steps,hwait,'即将完成');* M% c! ], r. L) ^
pause(0.05);
1 C- \1 G9 X( F! A6 \; U' m) Ielse# ]( U# k( S$ }$ O: D
PerStr=fix(k/step); %fix是向0靠拢取整函数
4 B5 L+ \$ }- e& s# D4 \7 Z- z6 w! ]% Lstr=['正在运行中',num2str(PerStr),'%']; %把1到150的数换算到1到100内,看占的百分比
$ c# o9 x* i2 R) j8 Uwaitbar(k/steps,hwait,str);
8 y6 t6 U" ?: Apause(0.05);7 v& A, }) h3 d# H
end. [3 i$ W+ u9 m, \. k5 O8 M7 {
end
. P; c  n$ Z8 \+ ]- D+ W" E( dclose(hwait);! h0 y; R8 x: b/ F
结果和上面是一样的4 c/ D  P% h5 [, K# J) U+ c

作者: shaox    时间: 2012-8-4 17:13
不错,有意思~~
作者: 墨雨金岚    时间: 2012-8-4 23:18
shaox 发表于 2012-8-4 17:13
& `! _  `+ \, C& H! C0 h& W不错,有意思~~
, c% F8 m5 l1 |! g( V
呵呵,有道是:美文共欣赏,疑义相与析,是也
作者: greyson    时间: 2013-8-19 11:21
好赞!谢谢楼主!




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5