[x] 總量
[x] 當前進度
[x] 耗時
通過以上元素可以延伸出:完成百分比、速度、預計剩餘時間、根據設定速度快慢閾值用不同的顏色來顯示進度條。
// 進度條
type bar struct
耗時
乙個計時器,需要注意的是即使進度沒有變化,耗時也是遞增的,看過乙個多程序進度條的寫法,沒有注意這塊,乙個gorouting:
func
(b *bar)
updatecost()
}}
進度
通過add方法來遞增當前完成的量,然後計算相關的值:速度、百分比、剩餘完成時間等,這裡計算速度一般是取最近一段時間內的平均速度,如果是全部的完成量直接除當前耗時的話計算出來的速度並不準確,同時會影響剩餘時間的估計。
func
(b *bar)
add(
)delete
(b.currents, befkey)
lastrate := b.rate
lastspeed := b.speed
b.rate = b.current *
100/ b.total
if b.cost ==
0else
if b.before ==
0else
if b.speed !=
0 b.mu.
unlock()
if lastrate != b.rate || lastspeed != b.speed
if b.rate >=
100}
顯示
最簡單的直接用\r。多進度條同時展示的話需要用到終端游標移動,這裡只需要用到游標的上下移動即可,\033[na 向上移動n行,\033[nb 向下移動n行。
移動到第n行:
func
move
(line int
)
為了支援其他的標準輸出不影響進度條的展示,還需要提供print, printf, println 的方法, 用於計算當前游標所在位置,每個進度條都會有自己的所在行,顯示的時候游標需要移動到對應的行。
Python 控制台顯示進度條
我們在寫一些python程式時,如果程式執行時間較長,我們希望能夠有乙個進度條來動態的展示程式執行進度。首先能想到的做法是用print將執行到第幾步列印出來,但這樣顯然不是我們想要的進度條,顯示進度占用了很多行,原因是print在末尾預設加上了 n 換行符。詳見 你應該知道的print import...
實現控制台進度條
此類功能在linux的控制台軟體中是很常見的,windows下沒有什麼印象。因為wget是c語言在linux上實現的,我首先考慮到的是不是有相關介面,於是就找來那本名著 uinx環境程式設計 查閱後並未發現相關api。有同事認為stdout也是檔案,應該看看檔案io章。於是就仔細學習了那章,複習和鞏...
c 控制台進度條類
console.writeline now show consolepare c new consolepare 100mb for int i 0 i 100 i i 3 console.writeline console.writeline ok console.read class conso...