作者adrianshum (Alien)
看板C_and_CPP
标题Re: [问题] 显示的问题(BCB)
时间Thu Jun 18 14:38:16 2009
※ 引述《likecyndi ()》之铭言:
: 标题: [问题] 显示的问题(BCB)
: 时间: Thu Jun 18 13:06:49 2009
:
: for(int i=0;i<100;i++)
: {
: Label1->Caption=i;
: Sleep(20);
: }
:
: 程式如上
: 我的想法是,Label上面可以从0跑到99
: 逐一显示出来
:
: 可是程式实际跑出来,只会显示99
: 纯粹只是想知道,为什麽不能这样写??
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 140.121.136.120
: 推 stool100: i<100 当然是到 99 06/18 13:08
: → deh3215:本来就是0跑到99... 06/18 13:37
: 推 Bencrie:因为你改了一百次Caption之後才更新画面 ... 06/18 13:39
: → Bencrie:既然你要从0跳到99,时间间隔又是固定的,何不用 Timer ? 06/18 13:40
: → likecyndi:不好意思 1~2楼的可能误解我的意思 06/18 13:57
: → likecyndi:0~98的数字 并不会被显示出来 而是只出现99 06/18 13:57
: → likecyndi:谢谢各位的指教 我知道可以用timer去run 06/18 13:58
: → likecyndi:只是好奇为什麽不能这样写 06/18 13:58
: 推 costbook:因为一瞬间就跑完了,你的眼睛看不到变化 06/18 14:08
: 推 QQ29:睡久一点 试试看 06/18 14:17
: → likecyndi:我试过睡很久 还是一样 所以应该不是那个问题 06/18 14:30
和睡多久没有关系.
可以猜想到, 原 po 应该在某个 gui component 的 event handler 做这
种事. 其实一般的 gui framework, 都会有一条 thread 负责处理 gui
的 event, invoke event handler, 和重绘画面. 要是你在 event handler
中改 label 的 caption, 任你怎样改, 它也要完成你的 event handler method
之後才可以继续运作继而才重绘画面.
所以, 你应该以另一 thread 去改 label caption, 这样才不会 把 gui
thread block 着. Timer 就是其中一种 "用另一thread" 的方法
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.155.236.82
1F:推 likecyndi:嗯嗯~~了解了 谢谢 06/18 15:35
2F:推 VictorTom:推详解:) 06/18 16:14
3F:推 hoihkj:sleep前加Application->ProcessManagement试看看 06/25 08:52