【Linux】简单实现进度条
2016-06-11 18:54
435 查看
一提起进度条,大家会想到在进行安转软件或下载视频等时,会出现以下几点
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
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
相关文章推荐
- 【Linux】文件查找:find
- 【Linux】vim的配置
- 【Linux】make的工作原理和makefile文件
- CentOs6.5 安装mysql
- Linux下python升级至2.7步骤
- linux-磁盘文件系统管理
- CentOS 6.5下编译FreeSWITCH1.6.6
- linux下端口的监听
- 嵌入式Linux裸机开发(十五)——LCD
- linux中curl命令
- 做10年Windows程序员与做10年Linux程序员的区别
- GCC、ARM-LINUX-GCC、ARM-ELF-GCC浅析
- task_struct结构体字段介绍--Linux中的PCB
- linux c 获取系统当前时区
- 聊聊Linux动态链接中的PLT和GOT(2)——延迟重定位
- Linux中的eval的用法
- Linux 进程间通信机制
- windows和linux进程与线程的理解
- 如何查看Linux磁盘空间大小
- Linux中安装配置hadoop集群