数学建模社区-数学中国
标题:
查看matlab程序运行进度
[打印本页]
作者:
墨雨金岚
时间:
2012-8-4 15:09
标题:
查看matlab程序运行进度
关于matlab中的waitbar(用于显示程序运行的进度)
( J$ b' n: L3 s) r% O+ A+ G# C
应用1:
. A5 E! K* J' u- U% e
h = waitbar(x,'message'); %其中x必须为0到1之间的数,message为显示的信息,其实这个x大于1也可以啊,但是进度条总在满的状态,x是多少就对应进度条显示的比例是多少
, A9 V! B$ s v8 }* |; ]1 P
举例: hwait=waitbar(0,'请等待>>>>>>>>'); %这个0显示的是进度条的位置,因为是0,就在起始位置,还有就是这个hwait就是这个waitbar函数的句柄
% J. K/ T, b% l; W9 d8 o, B: ?6 Z
得到:
3 o0 M) O/ b6 U& I: ~, X3 L
. N( @$ T+ f1 F+ ~2 \% n
应用2:
. U2 o! J/ \5 z4 E
waitbar(x,h,'updated message'); % x为显示的进度,必须在0到1之间;h为所建立的waitbar的句柄,updated message为实时显示的信息,此语句经常地用于for循环中
8 [' \3 t% V; |! ~7 p" i: E
举例:
5 I& ^8 u* H4 b3 S7 U
steps=100;
1 m& N, d( r7 }$ {. i! x9 o# ~
hwait=waitbar(0,'请等待>>>>>>>>');
& }0 T9 L) L: e1 ^( Q: M
for k=1:steps
* ]2 k0 v, j! r/ w
if steps-k<=5
. o o$ J9 G0 Q9 B1 X/ V
waitbar(k/steps,hwait,'即将完成'); %因为k/steps在逐步增大,所有进度条在往右走,另外,如果这个hwait不加上的话,会显示n多个进度条窗口,让你关闭不过来啊,加上之后就只显示一个了
6 D3 ]- F" J7 h& Z- v: V
pause(0.05); %延时一下啊 否则太快看不出来变化,一般有个0.01就能看出变化,但还是比较快的
- f. X3 V0 n( b5 \! {% `5 D1 Q
else
a0 g) G9 M$ J0 W2 u! `
str=['正在运行中',num2str(k),'%']; %用于显示如下图中“正在运行中46%”等比例数据
- {* U3 l- U. o" u% [( R+ m; q; a4 Q
waitbar(k/steps,hwait,str);
2 w* n7 R1 h1 e2 T" t- Q8 n8 z. X6 q
pause(0.05); %pause(n)函数是程序停止n秒后继续,n可以使分数或小数。函数的分辨率根据平台而定,大多数平台都能满足0.01秒的精度。
( U6 [% G! J$ e7 R. e3 P5 Z
end
1 ?, b0 w- Z* M0 g) d# g9 x7 w
end
, W( U& O" f: p4 j1 b4 L
close(hwait); % 注意必须添加close函数,也就是说运行完成后让此进度条消失
( F8 V8 |7 [6 S) A! ?1 R5 u
结果如下所示:
8 L- a5 Z' V1 J
显示正在运行中:
: C5 P2 T6 P* B7 w
. Q. Z8 q5 H0 c! ]% u! W9 V
显示即将完成:
}/ c9 P% U: ~0 t4 E, \ h' ]
+ k5 z7 e, y) b ]
上例子中,当循环步骤刚好是100,但是如果循环不是100的时候,要作小小的改变,举例如下:
9 b8 z; A7 G! d; |3 z; O. ]* C) w
steps=150;
x1 q/ v4 c8 l6 m5 `
hwait=waitbar(0,'请等待>>>>>>>>');
+ F4 L9 d, v$ H, f
step=steps/100; %这里step=1.5
" b2 f1 r8 V* S# p
for k=1:steps
. m6 Y: }$ B! F; q
if steps-k<=5
5 r1 Q2 J* b' k* O9 Q" l
waitbar(k/steps,hwait,'即将完成');
; R& Z5 q* e) O0 g/ I( l
pause(0.05);
$ z/ F r( `. E3 m
else
* h2 n( S* w' @ j
PerStr=fix(k/step); %fix是向0靠拢取整函数
Z* ^9 @, j# n. b* `
str=['正在运行中',num2str(PerStr),'%']; %把1到150的数换算到1到100内,看占的百分比
& Q( E$ U. T. R N4 [4 p9 }+ H
waitbar(k/steps,hwait,str);
C: t; w4 N. h3 Q
pause(0.05);
6 I5 ~& n0 |( E
end
! b, a8 i2 e# M) w K i/ [
end
# v; T5 U% ` k$ }% u& K3 E9 V% l
close(hwait);
1 b$ F8 \; }% a+ n! v% e2 m, T7 D, n5 H
结果和上面是一样的
" n7 }8 s, Y$ r, s4 I m% [
作者:
shaox
时间:
2012-8-4 17:13
不错,有意思~~
作者:
墨雨金岚
时间:
2012-8-4 23:18
shaox 发表于 2012-8-4 17:13
8 W) L, E0 t: x9 m7 @' z
不错,有意思~~
$ ?, C( u5 `7 I7 a$ a9 ~7 c
呵呵,有道是:美文共欣赏,疑义相与析,是也
作者:
greyson
时间:
2013-8-19 11:21
好赞!谢谢楼主!
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5