相信大家都用计算机或者手机下载过视屏或者游戏,那仫对于网速这个概念相信大家都不陌生,而我今天模拟实现的进度条就是来模拟实现类似加载或者拷贝文件时速度的显示。

    要了解进度条首先需要了解的是缓冲区的原理,下面先来看一个简单的栗子(以下都是在linux操作系统下):

    sleep在linux下的时间量级为秒,sleep在window下的时间量级为秒,Sleep在window下的时间量级为毫秒

    

      对于上面的一道程序,却输出不同的结果,在字符串"hello"的后面加上'\n'和不加存在不一样的结果,这是为什仫呢?我们知道在linux下的缓冲有三种方式:无缓冲,行缓冲和全缓冲,当然在C程序中缓冲区的方式是以行缓冲的方式刷新的,也就是说程序要在输入流中获取一个行结束标志(换行或者是EOF)才会显示在输出屏幕上.

      所以上面的两个栗子就好理解了,第一道栗子在输出字符串后添加了换行得到了一个行结束标志,然后才执行sleep休眠该进程,而对于第二个栗子因为没有添加换行,并没有得到行结束标志,先把该字符串存入到缓冲区中,当该进程休眠1s后,该进程结束得到了结束标志最后将缓冲区的内容输出到屏幕上。需要注意的是程序结束时系统会强制刷新缓冲区

 产生进度条的元素:

      1.一个不断向右增长的容器,可以直观看出当前的进度。   "%md",预宽为m,右对齐,"%-md",左对齐

      2.一个反应进度的百分比,在这里用到转义字符"%%"或者"\%",都代表的是"%","\\"代表'\'.

      3.一个标志,反应该进度是正在运行还是卡死,在程序中体现的是const char *arr="-\\|/";,是顺时针输出.


 Makefile的编写:

      Makefile用于简化代码的编译链接过程,而Makefile中最重要的就是依赖函数和依赖关系.

 一.单步编写Makefile.

      

      当编写好Makefile之后就是利用它来编译这个进度条的代码了,,,

      

       利用make clean 删除之前生成的Process.i ,Process.s,Process.o以及Proc.

       

        

  二.更简洁的Makefile编写直接由Process.c生成Proc


       


      该Makefile的编写将预编译,编译,汇编以及链接直接执行,不容易出错,执行过程如下:

      

   

      好了说了这仫多下面贴出自己实现的简单的进度条的代码。。。


      


     如果有值得改进的地方希望大家提出奥。。。

Logo

更多推荐