读书人

怎么根据加载进度制作进度条

发布时间: 2013-08-14 14:27:55 作者: rapoo

如何根据加载进度制作进度条
如题,怎么样根据当前程序的加载进度来确定进度条的进度?原理是什么?怎么实现?
我在网上搜到的大部分是每隔一个固定时间就增加一个固定的进度值,这样的话进度条好像就没有什么实际意义了吧,不能反映实际的程序加载情况。
而且大部分都是直接使用的进度条控件,呃,那东西实在是太丑了,我打算自己绘制进度条,不用系统的进度条,采用Win32 API实现,要准备两张图片来进行叠加我知道,但是不知道怎么实时反映程序的加载进度,以前写程序都比较小,最近写了个相对来说稍微大了点的程序,资源比较多,程序在运行时启动、切换都有一些延迟,所以想用进度条来遮掩,有没有人知道该怎么去做? API win32 C\C++ 进度条
[解决办法]
进度每隔比如1秒进多少可以是一个动态调整的步进值。
开始时(0%到5%)可以选一个固定进度步进值,边前进边重新估算下一步的步进值,通常到20%以后,这个步进值就比较接近实际值了。
[解决办法]

引用:
给4 楼 mujiok2003 的回复:
这没有多大用处吧,你是假设的总量值为100,并且还假设每隔500毫秒增长总量值的0.05,但是实际情况下,程序运行的时候这些是个未知数吧,要动态测量才可以。这里计算百分比的原理我是懂的,我不知道的是如何去获取资源总量和当前已加载完毕的资源总量。


那是个设计模式的例子而已。 总量和已经完成量很难估算的时候, 显示“正在加载”就好了。
[解决办法]
引用:
这样啊,那别人是怎么做到的呢,我们用的很多软件,特别是游戏软件好多都有进度条,而且它们的进度条应该是真实地反映进度,因为电脑慢,进度条长得也慢,电脑快,甚至都看不到进度条增长的画面,而且即使是显示“正在加载”我也需要知道它加载完了没有啊,那么如何知晓资源已经加载完毕呢?



只是下载文件的时候是可以及时获取真实的信息的,我上面已经说了,
把下载好的文件更新程序的这个实时的进度获取不到的,只能模拟了,不是真实值的!
[解决办法]
引用:
啊~~,那为什么别人可以,我上面说了,那些游戏什么的,它们是怎么做到的,CSDN里没有大神会这个吗?而且我觉得模拟的话还不如没有,你们觉得呢?忽悠人的东西嘛,明明不需要等,你硬要人等那么久,显得自己程序有多么多么的大,这个有点搞假的成分啊。

一般情况下进度条实际上是起示意作用,告诉用户程序没有卡死,一切正常。因而大多数进度条不需要特别准确,意思一下即可。如果lz的延迟时间比较短,几秒的话,进度条分隔成三、四段即可,太细的话反而效率低下。
有两种思路:
1、估计总的秒数t,设个定时器,每 t/3 秒刷新一次。可能最后一段会显得不“均匀”,但实际上无所谓。
2、如果加载的过程是顺序执行一些函数,则可分为3段,其间插入刷新进度条的语句

//begin to load
function1();
SendMessage(hProgress,33,...);
function2();
SendMessage(hProgress,66,...);
function3();
SendMessage(hProgress,100,...);
//loading ends

同样只要大体均匀即可,相信没有用户会无聊到掐秒表的。

PS:玩魔兽3,在加载地图的时候,我就发现进度条好像仅分成三段,在不均匀的三次移动后还要卡一会才进游戏。这么多年来早已习惯,也不觉有什么大不了的。

读书人网 >C++

热点推荐