日期:2014-05-17  浏览次数:20889 次

大神们进啊 , 关于线程和进度条同步的问题。。。

这是一个多线程的程序 ,线程中的操作有可能需要大量的等待时间,于是设置了一个进度条来显示当前任务完成的百分比 ,使得用户可以看到大概还需要多久可以完成。

但是却遇到了一个问题, 就是该例中的线程执行代码究竟需要多少时间是不确定的。

无法计算出线程执行完任务究竟需要多少的时间。

此种情况如何设置进度条与线程的同步 ?

在网上找了很久想找出一个进度条同步线程的例子, 结果看到的都是一些无聊的人写个for循环,然后在里面执行i++ ,然后sleep之后来显示个进度条给人看. 感觉真的没有多大意义.






------解决方案--------------------
在网上找了很久想找出一个进度条同步线程的例子, 结果看到的都是一些无聊的人写个for循环,然后在里面执行i++ ,然后sleep之后来显示个进度条给人看. 感觉真的没有多大意义.

这是最精简的结构了,这个如果你觉得没用说明你根本还是没理解。

------解决方案--------------------
你自己都不知道总共要花多少时间...你叫程序怎么告诉用户要花多少时间呢?怎么能够精确显示进度呢,不行的话,就是一个大概的问题而已,不用纠结是不是准确,你自己估计一个时间,以这个时间作为参照就行了,或者分段,完成一段就是完成一定百分比,只能这样了
------解决方案--------------------
回复等家分。祝楼主新年快乐
------解决方案--------------------
不知道总体时间的话是无法达到你的要求的,只能按你说的慢慢显示了
------解决方案--------------------
下载没分了  进来找10分可用分  你们继续



还有就是 你如果知道任务的进度  可以在代码里面设置任务的进度   等线程运行完成  然后再填满


利用时间 这就根本不合理

谁也不知道什么时候完成  既然是任务的进度条  就按照任务的进度设置

------解决方案--------------------
引用:
这是一个多线程的程序 ,线程中的操作有可能需要大量的等待时间,于是设置了一个进度条来显示当前任务完成的百分比 ,使得用户可以看到大概还需要多久可以完成。

但是却遇到了一个问题, 就是该例中的线程执行代码究竟需要多少时间是不确定的。

无法计算出线程执行完任务究竟需要多少的时间。

此种情况如何设置进度条与线程的同步 ?

这可能是你自己完全没有转过弯来!

总预估时间是变动的,当前已经花费的时间也是变动的。当前花费时间就好像要“追赶”总预估花费时间似地。

对于一个进度条而言,它的MaxValue是变动的,它的Value也是变动的。

你自己好好动动你的脑筋吧!
------解决方案--------------------
引用:
这个线程执行的任务存在的各种可能性,每种可能性都会造成线程执行任务花费的时间不同 ,并且差距是巨大的 ,有时候数秒执行完毕,有时候甚至5分钟后才执行完毕.

线程内有多个需要大量时间等待的操作,没有任何循环操作.  按正常来说是可以分多个线程来写的,但是分成多个线程以后依旧没有办法读取到任何一个操作的当前进度,具体需要多长时间执行代码无人知道,跟异步操作的原理差不多, 只有操作执行完毕了才知道已经结束了.


我给你打个比方,比如说你刚刚下班正在回家路上,你之后会遇到什么事情耽误时间是“无人知道”的吧?

但是你“已经”走了多少路程是知道的吧?!
------解决方案--------------------
同求
------解决方案--------------------
你自己估计哪一步会用百分之几的时间来确定吧
------解决方案--------------------
引用:
引用:引用:
这是一个多线程的程序 ,线程中的操作有可能需要大量的等待时间,于是设置了一个进度条来显示当前任务完成的百分比 ,使得用户可以看到大概还需要多久可以完成。

但是却遇到了一个问题, 就是该例中的线程执行代码究竟需要多少时间是不确定的。

无法计算出线程执行完任务究竟需要多少的时间。
……

你不能知道读取和处理了多少字节吗?既然总字节数已经确定了,你当然可以通过已处理的字节数来确定当前的进度(注意,这个进度和时间进度是不同的概念),除非你要全部字节读出来做操作,那也一样,改变思路:
准备阶段:读文件(总大小,当前读取都知道吧)
处理阶段:操作文件内容(看你具体的操作,看可不可以知道进度)
进度阶段:保存文件(总大小,当前写入都知道吧)
------解决方案--------------------
其实就是每个操作看作独立的进度,而不要把整个任务放在一个进度内(虽然用分段的方式也可以),这样不就可以显示读文件的进度了?也可以显示处理文件内容的进度了?还可以显示保存文件的进度了,当然,如果你把总体看作100,三个过程各占三分之一,这种分段方式也可以