Linux小程序——进度条

前言:哈喽小伙伴们,经过我们对多个Linux基本开发工具的学习之后,对于Linux的使用也算是更上一层楼。

所以这篇文章,我们就尝试使用我们学过的Linux知识来写一个小程序——进度条,达到实践以及加深知识映像的效果


目录

 一.什么是进度条

二.缓冲区

三.简易倒计时

四.进度条

五.完整代码展示

1.Progressbar.h

2.Progressbar.c

总结


 一.什么是进度条

 进度条相信大家都不陌生,平时玩游戏的时候都会有数据加载进度条。那么你知道进度条的原理是什么吗???

我们先来认识两个符号:

\n:换行符,从头开始另起一行

\r:回车符,使光标回到本行的开头 


二.缓冲区

首先我们要知道,在程序文件的加载过程中,不是一路顺风的,经常会出现卡顿和进度突然变快和变慢的情况,这就要关系到缓冲区的概念了。

大家一定都认识sleep()睡眠函数,使用它需要包含头文件#include<unistd.h>,它的作用是能够让程序在某个位置停留一定时间后再继续运行,下面我们就来展示一下:

我们设置睡眠时间为3秒,然后运行:

能够看出,printf函数打印完之后,程序并没有立刻停止,而是停留了一段时间再结束。 

 现在同样的代码,我只修改一个地方:将“\n”换行符去掉,我们在运行一次:

会发现初始的时候什么都没有,过3秒之后才将结果打印并退出。 

这是为什么呢???

实际上,我们的printf函数所输出的数据一开始是存放在缓冲区的,缓冲区里的数据会在程序结束时才会被冲刷并打印在显示器上,而这里的sleep函数的作用就是让程序睡眠一定时间后再终止所以“hello linux”才会过3秒后才打印

但是有一种特殊情况就是“\n”,它能够立即刷新一次缓冲区从而让包括它在内的之前的所有数据立即打印

除此了“\n”之外,还有一个函数可以主动冲刷缓冲区,它就是fflush(),给他传入形参stdout


三.简易倒计时

学习完缓冲区的知识之后,我们就能够制作一个简易的倒计时了,直接来看代码:

通过while循环打印,我们使用\r回车符每打印一次之后就让光标回到行头但是这样会造成覆盖,导致我们的倒计时无法显示,所以我们需要使用fflush强制将倒计时打印出来,并使用sleep使打印的间隔为1秒,实现倒计时:

 

由于不方便录视频,所以我们展示两张截图作为参考。 


四.进度条

在linux写一个独立项目,我们同样需要按照C/C++的方式来,一个头文件,两个源文件

唯一值得注意的是,这次我们要多写一个makefile文件,帮助我们执行指令

 

想要多文件同时操作,不要忘记vim的操作方式:在底行模式下输入vs + 文件名,再通过ctrl+ww,可以使光标在不同文件中移动。 

下面我们通过一步一步分析来写代码,完成进度条的制作过程:

 我们要先将所有文件的基本代码编写完成

并进行测试:

确认无误后,我们就可以只对Progressbar.h和Progressbar.c两个文件进行编辑了

首先我们要知道,进度条基本都是通过特殊字符来表示的,这里我们用‘#’字符来当做进度条

其次,进度条的加载过程,就像上边的倒计时一样需要循环,而且字符是逐渐增加的,这样我们就可以考虑使用字符数组了。如果是100%加载的话,那么数组的长度就要是100

那么为了方便日后我们更换进度条的符号以及数组的大小,我们都使用宏定义

#define type #

#define Length 100

创建完数组之后,如果我们不初始化的话,则会默认附随机值,影响我们打印,所以我们可以使用memset将数组元素均赋值为‘\0’,使用memset需要头文件#include<string.h>

char bar[length];
memset(bar,'\0',sizeof(bar));  

 随后我们就可以进行循环打印:

int count = 0;
while(count <= Length)
{
    printf("[%-100s][%d%%]\r",bar,count);
    fflush(stdout);
    bar[count++] = type;
    usleep(500000);
}

除了printf里边的代码,其他的相信小伙伴们都能够理解,下面我们就来仔细讲解一下printf

我们要打印的,也就两个东西,一是进度条,二是显示已经加载了多少的百分比数字

这个进度条,我们用“[]”来括起来,而且我们希望这个“[]”已经是固定的长度,随后让“#”去一点点增长,所以我们需要在%s中间加一个-100,也就是数据向右空出100个空格

然后就是百分比数字显示,我们就直接打印count,这里要注意一下如果想要打印出“%”,就需要使用“%%”

初始情况下,bar数组为空,然后每打印一次,就将bar数组的一个元素改为“#”。

由于sleep函数只能睡眠整数秒,但是睡眠100时间又太长,所以我们使用usleep()微秒睡眠函数,其中1*1000*1000为1秒,所以我们睡眠0.5秒则传参500000。

如此循环100次,便可实现进度条:


五.完整代码展示

1.Progressbar.h

#pragma once

#include<stdio.h>
#include<string.h>                                                                                                                                 
#include<unistd.h>
#define type '#'
#define Length 100

void Probar(); 

2.Progressbar.c

#include"Progressbar.h"
void Probar()
{
   char bar[Length];
   memset(bar,'\0',sizeof(bar));

   int count = 0;
   while(count <= Length)
   {
       printf("[%-100s][%d%%]\r",bar,count);
       fflush(stdout);
       bar[count++] = type;
       usleep(500000);
   }

   printf("\n");
}

总结

简易的进度条的制作过程就分享到这里啦,希望能够让小伙伴们对linux开发工具的使用更进一步,同时在Linux上编程也更加顺手。

最后还是要记得一键三连哦,我们下期再见!

  • 62
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 56
    评论
小程序的audio组件可以让开发者方便地实现音频播放的功能。进度条是音频播放界面中经常用到的一种控件。在小程序中使用audio进度条可以让用户更加清晰地了解音频的播放进度,从而更好地掌握音频的播放状态。 实现audio进度条的方法比较简单。在audio组件中,可以使用onTimeUpdate事件来监听音频的播放进度。当音频播放时,该事件会不断触发,并携带当前的播放进度信息。开发者可以通过计算当前的播放进度与总时长的比值,得出当前进度条的位置,并动态更新进度条的UI。另外,如果需要实现进度条的拖动功能,也可以在进度条组件上设置bindchange事件,来监听用户对进度条的操作,并根据操作更新音频播放进度。 在实现audio进度条时,需要注意的一些点包括:首先,由于音频播放进度是不断变化的,因此需要在不断更新进度条UI的同时,尽量减少不必要的UI渲染操作,以提高程序的运行效率。其次,在用户暂停或拖动进度条时需要及时暂停或调整音频的播放进度,以保证播放的准确性。最后,在设计进度条的样式时需要注意与整个应用程序的UI风格保持一致,以提高用户的使用体验。 总之,通过使用小程序的audio组件,并结合进度条控件的应用,能够为用户提供一个清晰、直观的音频播放体验,同时也有助于开发者更好地掌握和管理音频的播放进度。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

很楠不爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值