The English version is here: https://www.geekdt.com/376.html

简介

其实这只是一小段代码,并非完整程序,但是制作成了可以直接展示的样子,所以在使用过程中可能要根据需求进行大量的修改

程序,使用了C++ 11的新特性 thread多线程,所以在旧版的编译器中会出现thread部分报错,请大家升级编译器或者直接上VS最新版!!!

关于第一版

第一个版本是不带多线程的,但是左边的clock似乎不能等待每一次进度条跑一次才转一下哎,所以多进程让他一直转咯。

感觉第一版是没有意义的,所以直接放上第二版了。

开发环境

当然是最新的Visual Studio 2017啦,不上最新版怎么能Geek的起来呢?理论上任何支持C++ 11规范的编译器均可以正常使用,当然,这个程序调用了Windows.h的header文件,所以顾名思义要在Windows环境下跑咯。

效果展示

代码部分

#include <iostream>
#include <Windows.h>
#include <thread>
using namespace std;

void clock(int cache);
void run_clock(int y);
void run_line(int y);

int load_num = 0;
int x = 6;

int main()
{
	int local;//存储输出的位置信息(在第local行输出整个进度条)
	int i;
	cin >> local;
	thread clock(run_clock, local);
	clock.detach();
	i = 0;
	while (i!=50)//构建一个preload条
	{
		cout << "▂";
		i++;
	}
	run_line(local);
	cout << endl << "Done!" << endl;
	system("pause");
	return 0;
}

void gotoxy(int x, int y)//功能函数,跳转光标 详见https://www.geekdt.com/248.html 
{
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

void run_line(int y)//绘制进度条 
{
	while (load_num != 100)
	{
		gotoxy(x, y);
		cout << "█";
		x += 2;
		load_num += 2;
		gotoxy(x, y);
		printf("<%d%%>", load_num);//输出进度 百分比
		Sleep(500);
	}
}

void run_clock(int y)//绘制clock模型 
{
	int i = 1;
	while (load_num!=100)
	{
		if (i > 4)
		{
			i = 1;
		}
		gotoxy(3, y);
		clock(i);
		i++;
		gotoxy(x+4, y);
		Sleep(200);
	}
}

void clock(int cache)//构建clock模型 
{
	switch (cache)
	{
		case 1:
			{
				cout << "|";
				break;
			}
		case 2:
			{
				cout << "/";
				break;
			}
		case 3:
			{
				cout << "-";
				break;
			}
		case 4:
			{
				cout << "\\";
				break;
			}
	}
}

代码下载

由于网页html标签的缘故,部分代码可能会出现各种未知错误,如遗漏,缺失,显示不正常等暂未发现的错误,希望大家帮助指正。使用代码建议下载cpp文件进行编辑,以防不必要的麻烦。
Download


Hope to be a free geek forever.