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

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

实现的进度条功能

设置一个区间可以显示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还是比较有趣的,虽然实现的代码很少,但是这样一个程序可以让我们熟悉一下编程中实时性,以及对回车换行的误解,所以还是有必要阐述一下的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值