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

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

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

以下就是进度条的样子咯,感兴趣的朋友可以自己去“美化”一下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;
}


相关文章
|
存储 C++ 索引
哈希表、集合、映射
哈希表、集合、映射
|
10月前
|
数据采集 SQL 数据处理
当实时消费遇到 SPL:让数据处理更高效、简单
SLS 对实时消费进行了功能升级,推出了 基于 SPL 的规则消费功能。在实时消费过程中,用户只需通过简单的 SPL 配置即可完成服务端的数据清洗和预处理操作。通过SPL消费可以将客户端复杂的业务逻辑“左移”到服务端,从而大幅降低了客户端的复杂性和计算开销。
449 56
|
人工智能 数据管理 jenkins
探索软件测试中的自动化框架:从基础到高级实践
在当今快速发展的软件行业中,自动化测试已成为提高开发效率和保障产品质量的关键手段。本文将深入探讨软件测试自动化的各个方面,包括其重要性、主流的自动化测试框架、以及如何有效地实施自动化测试策略。我们还将通过案例分析,展示自动化测试在实际项目中的应用效果,以及面临的挑战和解决方案。无论是软件开发者还是测试工程师,了解并掌握自动化测试技术都将极大提升工作效率和产品质量。
306 0
|
前端开发 UED 容器
CSS基础-文本样式:颜色、字体、大小、对齐
【6月更文挑战第8天】本文介绍了CSS中设置文本颜色、字体、大小和对齐的基础知识。通过color属性改变文本颜色,使用font-family设置字体,用font-size调整大小,text-align控制对齐方式。注意浏览器兼容性、文本溢出和响应式设计的问题。提供的代码示例展示了这些属性的用法,帮助创建更具吸引力的网页。
421 6
|
开发工具 git
mac git配置 idea
mac git配置 idea
455 1
|
供应链 监控 安全
【区块链】记账的千年演化:从泥板到区块链
记账,作为人类文明进步的重要标志之一,其技术与方法的演变,见证了经济、社会乃至文化的深刻变迁。从最原始的实物记录到今天的数字账本——区块链,每一阶段的革新都推动着交易透明度、安全性与效率的大幅提升。本文将穿越千年历史长河,探索记账科技的演进之路。
340 0
|
存储 缓存
Flutter 文件读写---path_provider
Flutter 文件读写—path_provider 在Flutter中,可以通过path_provider库来实现文件的读写操作。这个库提供了许多方法,可以方便地获取设备上的常用目录,比如文档目录、下载目录、临时目录等。
470 1
|
存储 分布式计算 Hadoop
黑马程序员-大数据入门到实战-HDFS分布式存储
黑马程序员-大数据入门到实战-HDFS分布式存储
432 0
|
存储 Web App开发 移动开发
使用IndexedDB进行前端数据持久化存储
在现代前端开发中,数据持久化存储是一个关键的需求。传统的客户端存储方案如Cookies和LocalStorage有着一定的限制,不能满足大规模数据的存储和高级查询需求。而IndexedDB作为HTML5规范的一部分,提供了一个强大的浏览器端数据库,允许前端开发者在浏览器中持久化存储结构化数据。本文将深入探讨如何使用IndexedDB进行前端数据持久化存储,包括IndexedDB的基本概念、操作流程以及一些实用的技巧。
1470 0