我们在安装软件或者远程拉取代码时,通常回看安装进度显示,例如:
今天给大家分享一个C语言使用static实现执行进度显示的小demo.
1、static关键字修饰局部变量的作用
2、windows平台下休眠函数Sleep使用
3、随机数函数使用
4、windows平台下的光标隐藏
进度显示一般跟时间有关,隔一段时间刷新一下页面数据显示,可以使用Sleep函数实现时间间隔。
页面数据显示逻辑可以封装成一个函数,隔一段时间调用一下
执行进度值可以放在函数内部,每执行一次函数进行+1操作,并且具有累加效果,因此该变量必须使用static修饰。(static修饰的局部变量只能初始化一次)。
int progress(){ static int step = 0; printf("任务进行中,当前进度为:%d%%",step++); return step > 100; } |
注意:C语言输出%使用%%。
while(1){ int over = progress(); if(over) { break; } } printf("\n"); printf("传输完成!....."); |
当progress返回1,则执行结束。
执行代码会发现一下就完成了从0到100的变化,直接就传输完成了,为了看到逐渐变化的效果,加入windows的Sleep函数,隔一段时间在调用pregress函数。
Sleep(100); |
Sleep函数为windows下的休眠函数,参数为间隔时间,单位为毫秒。
运行发现:所有的输出全部显示在页面上面了,进度看起来并不清晰。
加入清屏函数解决这一问题
该函数为windows下的清屏函数。
system("cls"); |
进度的变化是均匀变化的,不符合显示逻辑。加入随机数修改时间间隔。
想要进度变化看起来随机,只需要修改每次调用progress的间隔时间即可。
Sleep的参数为毫秒,每次随机产生一个0~1000内的随机数作为间隔时间。
#include #include // ..... // 刷新随机数的种子 srand((unsigned int)time(NULL)); // 产生随机数 int sec = rand() % 1000; // 休眠 Sleep(sec); |
页面在显示进度的时候会有光标在闪烁,可以使用windows平台下的隐藏光标方式将其隐藏起来。
#include // ...... CONSOLE_CURSOR_INFO curInfo; //定义光标信息的结构体变量 curInfo.dwSize = 1; //如果没赋值的话,隐藏光标无效 curInfo.bVisible = FALSE; //将光标设置为不可见 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //获取控制台句柄 SetConsoleCursorInfo(handle, &curInfo); //设置光标信息 |
#include #include #include #include int progress(){ static int step = 0; printf("任务进行中,当前进度为:%d%%",step++); return step > 100; } int main() { CONSOLE_CURSOR_INFO curInfo; //定义光标信息的结构体变量 curInfo.dwSize = 1; //如果没赋值的话,隐藏光标无效 curInfo.bVisible = FALSE; //将光标设置为不可见 HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //获取控制台句柄 SetConsoleCursorInfo(handle, &curInfo); //设置光标信息 srand((unsigned int)time(NULL)); while(1){ int over = progress(); if(over) { break; } int sec = rand() % 1000; Sleep(sec); system("cls"); } printf("\n"); printf("传输完成!....."); return 0; } |