歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 【Linux】簡單實現進度條

【Linux】簡單實現進度條

日期:2017/3/3 12:01:32   编辑:Linux技術
一提起進度條,大家會想到在進行安轉軟件或下載視頻等時,會出現以下幾點
1、進度條存在一個區間,不斷加載數據,直到區間加載滿了。
2、發現會顯示你的進度,從0%~100%。
3、在網速不好的時候,會出現一個旋轉的小圈,表示在進行加載數據。
思路:
我們通過一個數組,每加載成功一次,數組會多出現一個標示。由於進度條是在一行內進行的,故我們需要回車,不需要換行,通過“\r”實現。
1、進度條由0%~100%,在字符數組中,輸出一串字符時,最後以“\0”結束的,故需要一個大小為102的數組,加載成功的數據用“#”表示。
2、進度條會出現一個區間,然後在裡面進行加載,故先用“【”和“】”表示加載的區間。
3、定義一個rate標識進度,每進行一次加一,直到100時停止。
4、在進行回車前,需要進行刷新。
5、在加載進度時,通過sleep()或usleep()控制睡眠時間,sleep表示秒,usleep表示微秒。
6、對於加載中旋轉的小圈通過“/-|\”逆時針進行。
下面實現進度條
650) this.width=650;" title="3.png" src="http://s2.51cto.com/wyfs02/M02/82/4E/wKioL1dQ7hHzGbjeAABvZmygNCE884.png-wh_500x0-wm_3-wmp_4-s_269599084.png" alt="wKioL1dQ7hHzGbjeAABvZmygNCE884.png-wh_50" />
在打印buf時,每次在中間預留100個位置,由於在進行打印buf時,會從後向前打印,故用-100.
在rate為0時,不進行加載‘#’,故從buf+1開始輸出。
通過make進行編譯鏈接,結果如下所示
650) this.width=650;" title="3.png" src="http://s2.51cto.com/wyfs02/M02/82/4E/wKioL1dQ723Ck9WRAAAMuNjKndA615.png-wh_500x0-wm_3-wmp_4-s_2390407616.png" alt="wKioL1dQ723Ck9WRAAAMuNjKndA615.png-wh_50" />
650) this.width=650;" title="3.png" src="http://s1.51cto.com/wyfs02/M02/82/4F/wKiom1dQ7Z6Aui-zAAAT5X5SURc153.png-wh_500x0-wm_3-wmp_4-s_2272615138.png" alt="wKiom1dQ7Z6Aui-zAAAT5X5SURc153.png-wh_50" />
有關make和makefile可查看本人上一篇博客:http://10741357.blog.51cto.com/10731357/1785098
● 通過兩個程序對回車、換行以及緩沖區進行分析。
650) this.width=650;" title="3.png" src="http://s3.51cto.com/wyfs02/M02/82/50/wKiom1dQ8gzzpnMsAAA7ZoFnWWo434.png-wh_500x0-wm_3-wmp_4-s_2652279785.png" alt="wKiom1dQ8gzzpnMsAAA7ZoFnWWo434.png-wh_50" />
上述兩個程序運行結果一樣嗎?兩個都會打印出“hello world”,但是左邊程序會先休息1秒再打印,右邊程序先打印後休息1秒。為什麼?由於在c語言中是行緩沖,程序存放在緩沖區中,遇到'\n'進行刷新,沒有'\n'一直進行後面操作,程序被強制結束會進行刷新。回車換行是一行到新一行的打印。
本文出自 “Scen” 博客,請務必保留此出處http://10741357.blog.51cto.com/10731357/1785713
Copyright © Linux教程網 All Rights Reserved