Windows 新建缓冲区应对高速闪屏问题

news/2024/10/7 16:05:28

高速使用 system("cls") 会导致非常严重的闪屏

新建第二个缓冲区即可解决该问题,操作分为两步,打开缓冲区开关,以及将缓冲区内容输出到控制台

一份无优化的用来比对效果的代码

#include<bits/stdc++.h>
using namespace std;
int main(){while(1){for(int i='a';i<='z';++i){putchar(i);}system("cls");}
}

双缓冲代码

#include<bits/stdc++.h>
#include<windows.h>
HANDLE hOutput;
COORD coord={0,0};
HANDLE hOutBuf=CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CONSOLE_TEXTMODE_BUFFER, NULL
);
CONSOLE_CURSOR_INFO cci;
char data[80000];
DWORD bytes=0;
void start_cls(HANDLE hConsole=hOutput){COORD coordScreen={0,0}; DWORD cCharsWritten;CONSOLE_SCREEN_BUFFER_INFO csbi;DWORD dwConSize;if (!GetConsoleScreenBufferInfo(hConsole, &csbi)) return;dwConSize = csbi.dwSize.X * csbi.dwSize.Y;if (!FillConsoleOutputCharacter(hConsole, (TCHAR)' ', dwConSize, coordScreen, &cCharsWritten)) return;SetConsoleCursorPosition(hConsole, coordScreen);
}
void Flush_Screen(unsigned Flush_size){ReadConsoleOutputCharacterA(hOutput,data,Flush_size,coord,&bytes);WriteConsoleOutputCharacterA(hOutBuf,data,Flush_size,coord,&bytes);
}
void set_Flush(){hOutput=GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleActiveScreenBuffer(hOutBuf);cci.bVisible=0;cci.dwSize=1;SetConsoleCursorInfo(hOutput,&cci);SetConsoleCursorInfo(hOutBuf,&cci);
}
void show(int Flush_size){Flush_Screen(Flush_size);
}
int main(){set_Flush(); //初始化缓冲信息while(1){start_cls(); //打开缓冲开关for(int c='a';c<='z';c++){putchar(c);}show(100);  //输出到控制台(这里一定要开够,大了可以,但是小了不行)}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/68669.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

[UESTCPC 2024] 2 聚类算法

思路 不想打了代码 后面再打 总结 写都没写怎么搞

腾讯自研Git客户端,助力每个人都可以轻松使用Git

工具介绍 UGit是一款腾讯自研的Git客户端,为了让每个人都可以轻松使用Git,从而提高开发效率和团队协作的流畅性。支持工蜂MR/CR,工蜂议题管理,另外对于Git的原生特性有着深度支持。支持的系统 支持macOS 10.11+、Apple Silicon和Win64位系统。 核心功能介绍 便捷的大文件管…

php连接数据库的基本步骤是什么

使用 PHP 连接数据库的基本步骤如下: 1. 创建数据库配置文件创建配置文件:在项目的根目录或适当的位置创建一个配置文件,例如 config.php。编写配置信息:在 config.php 文件中编写数据库连接信息。 示例配置文件内容如下:<?php // 数据库配置文件// 数据库类型 define…

php连接数据库mysql配置

使用 PHP 连接 MySQL 数据库通常涉及以下几个步骤:创建配置文件、引入配置文件、创建数据库连接、执行 SQL 查询以及关闭连接。下面是一个详细的示例: 1. 创建数据库配置文件 (config.php)创建配置文件:在项目的根目录或适当的位置创建一个配置文件,例如 config.php。编写配…

宝塔数据库老是自动停止怎么解决

宝塔数据库经常自动停止可能是由于多种原因引起的。以下是一些常见的排查和解决方法: 1. 检查错误日志查看日志:登录宝塔面板。 进入“软件管理”,找到相应的数据库(如 MySQL)。 点击“设置” -> “错误日志”,查看具体的错误信息。2. 检查配置文件检查配置文件:找到…

信息学奥赛复赛复习14-CSP-J2021-03网络连接-字符串处理、数据类型溢出、数据结构Map、find函数、substr函数

PDF文档公众号回复关键字:202410071 P7911 [CSP-J 2021] 网络连接 [题目描述] TCP/IP 协议是网络通信领域的一项重要协议。今天你的任务,就是尝试利用这个协议,还原一个简化后的网络连接场景。 在本问题中,计算机分为两大类:服务机(Server)和客户机(Client)。服务机负责…