发布时间:2024-12-11 14:01
无论下载,解压缩,复制等情况时,我们总能看到进度条这种东西。进度条以图片形式的可视化窗口直观的显示出计算机处理当前任务的速度,完成度,剩余完成的任务量,以及需要的时间等信息,所以在此我们可以自主实现一个简易的进度条小程序。
准备:
在这之前需要知道换行和回车的区别,即\\r和\\n。在linux中 \\r 让光标回到当前行的开始,\\n让光标从下一行开始。还需要知道linux中 缓冲区写满后才会输出。
思路:
我们通过一个数组,每加载成功一次,数组会多出现一个标示。由于进度条是在一行内进行的,故我们需要回车,不需要换行,通过“\\r”实现。
1、进度条由0%~100%,在字符数组中,输出一串字符时,最后以“\\0”结束的,故需要一个大小为102的数组,加载成功的数据用“#”表示。
2、进度条会出现一个区间,然后在里面进行加载,故先用“【”和“】”表示加载的区间。
3、定义一个rate标识进度,每进行一次加一,直到100时停止。
4、在进行回车前,需要进行刷新。
5、在加载进度时,通过sleep()或usleep()控制睡眠时间,sleep表示秒,usleep表示微秒。
6、对于加载中旋转的小圈通过“-\\\\|/”进行。
效果如下:
代码如下:
/*************************************************************************
> File Name: proc_bar.c
> Author: huozhigang
> Created Time: Thu 16 Feb 2017 02:15:49 AM PST
************************************************************************/
#include
#include // sleep() 以秒睡眠 usleep()以微秒睡眠 1s = 10^6ms
void proc_bar()
{
int count = 0; // 记录百分比数
char buf[102]={\'\\0\'}; // 存储0 - 100 101个‘#’ 和 \'\\0\'
const char* stat = {\"-\\\\|/\"}; // 存储标志正在工作 假装在“旋转“
while( count<=100 )
{
// -101 是为了固定两个括号之间的距离不变
printf(\"[%-101s][%%%d]%c\\r\",buf, count, stat[count%4]);
fflush(stdout);
buf[count++] = \'#\';
usleep(10000);
}
printf(\"\\n\");
}
int main()
{
proc_bar();
return 0;
}
Windows10 + WSL (Ubuntu) + Anaconda + vscode 手把手配置python运行环境(含虚拟环境)
Java高级期末复习:Java EE框架整合开发入门到实战——Spring+Spring MVC+MyBatis微课版
层层剖析,让你彻底搞懂Self-Attention、MultiHead-Attention和Masked-Attention的机制和原理
vue集成openlayers(vue+openlayers)加载geojson并实现点击弹窗教程
解决uni-app中uni.request发送POST请求没有反应。
语料库数据处理个案实例(读取多个文本文件、读取一个文件夹下面指定的多个文件、解码错误、读取多个子文件夹文本、多个文件批量改名)
一、什么Docker? Docker有什么用?Docker能干嘛?
【无标题】pca bp gabp cpobp算法的人脸识别技术研究
python传入参数的几种方法_python传递参数方式小结
基于 Rainbond 部署 DolphinScheduler 高可用集群
NLP经典论文:Attention、Self-Attention、Multi-Head Attention、Transformer 笔记