当前位置:   article > 正文

linux c多线程进度条,C语言实现进度条Demo(vs/gcc) | 术与道的分享

c语言多进程进度条显示

在计算机执行任务的时候,进度条会以一种实时的,以图片、符号等显示处理任务的速度、完成度及剩余任务量的大小、百分比等来呈现给我们,比如我们在下载东西,观看视频时的缓冲区,拷贝大文件的时候都会看到它的缩影。

实现的进度条功能

设置一个区间可以显示100个#字符,左右区间各有一个中括号,但是中括号位置固定不变,在方括号内,我们用#字符来对其填充,每隔一段时间,进度条刷新一个#字符,同时在右括号的外面放置一个实时显示进度的百分比计数器,直到区间被填充满为止。

设计思想

①实时显示:利用fflush(stdout),清空标准输出缓冲区,在C语言中,缓冲区是以行形式读取和存储的,所以若未遇到\n回车换行,缓冲区不会将数据立刻显示出来,而是进入sleep函数,但是实际上最新被执行的仍然是sleep之前的程序,因为没有\n出现,因此数据会被先暂放在缓冲区内,使用fflush强制刷新就可以实时的显示。

②进度条的递增:这里用到的是覆盖的思想,就是说第一次显示一个#,第二次从最左边开始显示2个#,以此类推。实现这样的功能也很简单,在C/C++中,\n代表的是回车换行,回车与换行时两个动作,回车是回到当前行的行首,换行时换到下一行,这里我们使用\r来回车。

进度条Demo源代码(vs2017)

#include

#include

#include

int main()

{

char bar[102];//102表示进度条从0-100这101个数加上1个'\'回车符

int i = 0;

bar[0] = '\0';

const char *p = "-\\|//";//字符串表示进度条显示的进度比率后面的动态变化

memset(bar, 0, sizeof(bar));//初始化为0

while (i <= 100)

{

bar[i] = '#';//进度条的形状

printf("[%-101s][%d%%][%c]\r", bar, i, p[i % 4]);

//\r:直接退回首部,不断覆盖 i%4:字符串的每一个字符交替动态显示,进行覆盖

fflush(stdout);//刷新标准输出缓冲区,因为没有遇到\n符,所以需要强制刷新

i++;

Sleep(100);

}

printf("\n");

system("pause");

return 0;

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#include

#include

#include

intmain()

{

charbar[102];//102表示进度条从0-100这101个数加上1个'\'回车符

inti=0;

bar[0]='\0';

constchar*p="-\\|//";//字符串表示进度条显示的进度比率后面的动态变化

memset(bar,0,sizeof(bar));//初始化为0

while(i<=100)

{

bar[i]='#';//进度条的形状

printf("[%-101s][%d%%][%c]\r",bar,i,p[i%4]);

//\r:直接退回首部,不断覆盖 i%4:字符串的每一个字符交替动态显示,进行覆盖

fflush(stdout);//刷新标准输出缓冲区,因为没有遇到\n符,所以需要强制刷新

i++;

Sleep(100);

}

printf("\n");

system("pause");

return0;

}

Gcc实现进度条Demo

70.jpg

jdt.png

xgt.png

这些小Demo还是比较有趣的,虽然实现的代码很少,但是这样一个程序可以让我们熟悉一下编程中实时性,以及对回车换行的误解,所以还是有必要阐述一下的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/334871
推荐阅读
相关标签
  

闽ICP备14008679号