利用缓冲区模拟进度条加载

简介: 利用缓冲区模拟进度条加载

界面呢非常简洁,代码也非常简单,非常适合有用来练手或者消遣。

以下就是进度条的样子咯,感兴趣的朋友可以自己去“美化”一下hh

ProgressBar.c文件

用来定义ProcBar函数,该函数就是实现进度条的主核心代码,用“#”表示进度,利用之前学过的缓冲区知识,使用\r回车符来不断覆盖之前的“进度”。

#include"ProgressBar.h"
#define MAX_len 101
#define Style '#'
 
const char* lab="|/-\\";//旋转光标
void ProcBar(double tol,double cur){//tol表示要下载数据的总字节大小,cur表示当前已经下载的字节数
  int i=0;
  char a[MAX_len]={0};
  memset(a,'\0',sizeof a);
  int lab_len=strlen(lab);
  double rate=(int)(cur*100.0/tol);//当前下载了的百分比
  int target=(int)(rate);//循环次数
  while(i<=target){
    printf("[%-100s][%.1lf%%][%c]\r",a,rate,lab[i%lab_len]);
    fflush(stdout);
    a[i++]=Style;
  }
  return ;
}

ProgressBar.h

声明各种头文件,以及ProcBar函数的声明,为了提高代码的灵活性,使用一个回调函数作为调用模拟进度条函数的参数。

#include<stdio.h>
#include<unistd.h>
#include<string.h>
 
typedef void(*callback_pb)(double,double);//函数指针
 
void ProcBar(double tol,double cur);

Main.c

main函数的定义,以及download函数的定义,download函数模拟了在网络中下载文件的情景。假设文件的大小以及网络带宽,实现了下载数据的与进度条的完成度的匹配。

#include"ProgressBar.h"
 
void download(callback_pb cb){
  //文件总大小
  double filesize=1024*1024*100;
  //当前下载量
  double current=0;
  //网络带宽
  double bandwidth=1024*1024;
 
  printf("download begin,current: %.1lfMb\n",current/1024/1024);
 
  while(current<=filesize){
    cb(filesize,current);
    usleep(100000);//单位是微秒
    current+=bandwidth;
 
  }
  printf("\ndownload end,current: %.1lfMb\n",filesize/1024/1024);
}
int main(){
   download(ProcBar);
  return 0;
}


相关文章
|
11月前
|
前端开发 UED
一个页面上有大量的图片,加载很慢,你有哪些方法优化这些图片的加载?
一个页面上有大量的图片,加载很慢,你有哪些方法优化这些图片的加载?
|
23天前
使用 fflush 函数刷新文件缓冲区的示例代码
示例代码展示了如何使用 `fflush` 函数刷新文件缓冲区,确保数据立即写入文件,而不是等待缓冲区满或程序结束时自动写入。
|
23天前
|
存储 编译器 C语言
如何在 C 语言中判断文件缓冲区是否需要刷新?
在C语言中,可以通过检查文件流的内部状态或使用`fflush`函数尝试刷新缓冲区来判断文件缓冲区是否需要刷新。通常,当缓冲区满、遇到换行符或显式调用`fflush`时,缓冲区会自动刷新。
|
3月前
|
JavaScript
成功解决:el-dialog弹出窗口、数据第一次没有加载、第二次打开才能加载数据。(每次页面刷新后、第一次打开dialog窗口、图片数不加载)
这篇文章分享了解决Vue中`el-dialog`弹出窗口在第一次打开时数据未加载问题的技巧,通过改变组件的`key`属性来强制Vue重新渲染DOM,从而确保数据正确加载。
成功解决:el-dialog弹出窗口、数据第一次没有加载、第二次打开才能加载数据。(每次页面刷新后、第一次打开dialog窗口、图片数不加载)
|
3月前
|
开发框架 前端开发 JavaScript
在Winform程序中增加隐藏的按键处理,用于处理一些特殊的界面显示或者系统初始化操作
在Winform程序中增加隐藏的按键处理,用于处理一些特殊的界面显示或者系统初始化操作
|
4月前
|
存储 计算机视觉 Python
加载图像,显示并保存
【7月更文挑战第28天】加载图像,显示并保存。
41 2
|
6月前
|
缓存
自定义SDWebImage图片缓冲区自清理机制
自定义SDWebImage图片缓冲区自清理机制
120 0
|
6月前
|
弹性计算 运维 Shell
动态时针进度条
【4月更文挑战第29天】
33 0
|
6月前
|
计算机视觉 C++
win7系统OpenCV读取图片内存位置异常
win7系统OpenCV读取图片内存位置异常
152 0
|
小程序 JavaScript 前端开发
小程序实现滚动加载(懒加载)
小程序是一项很受欢迎的技术,随着其能力的不断增强,越来越多的人开始使用小程序来完成各种任务。当我面面临一个页面有非常多的数据时,该如何处理呢,显然一次性全部加载完,会非常消耗性能的,为了解决这些问题从而出现了一种叫滚动加载的数据处理方式,也被称为“无限滚动”或“懒加载”,它可以使你的页面在不刷新的情况下连续加载更多数据。在本文中,我们将讨论如何在小程序中实现滚动加载。
282 0