zoukankan      html  css  js  c++  java
  • 控制台双缓冲技术

    简介

    双缓冲技术主要使用在绘图方面,不过,借鉴双缓冲技术的原理,可以让你的控制台程序优势更加优秀的体验,例如你编写的控制台游戏,往往需要不停地刷新屏幕,这时候会造成非常严重的问题-----屏幕闪烁!这极大的降低了用户体验(虽然说没什么用户吧,但这并不妨碍我们追求完美嘛~),双缓冲就可以消除这种闪烁

    控制台双缓冲技术原理:

    背景知识:你所看到的黑色界面所显示的东西 都是在"屏幕缓冲区"中显示的,我们能看的这个缓冲区,叫做"当前(激活的)屏幕缓冲区",我们可以创建其他缓冲区,也可以对其进行操作,但是是不可见的.

    原理介绍:

    新建一个屏幕缓冲区(此时不可见)

    在新建的屏幕缓冲区中写入想要一次显示的内容

    把该缓冲区设置为当前缓冲区(可见)

    ---->为什么能解决闪屏问题?

           解释:假设你在屏幕上打印一系列11111111111111111111111111111111111111111111111111111,如果你是采用循环printf("1")来实现的,那么实际情况是屏幕上先输出1然后11接着111,,以此类推,我们看到了写的过程,再这样的过程中我们就会感到闪烁了,如果这么多1是一下子显示出来的,就不会有闪烁,双缓冲吧写的过程放在不可见的屏幕缓冲区中,一次性展示出来,就解决了闪烁问题.

    具体实现:

    ---------------------------------创建屏幕缓冲区--------------------------------------

    1. HANDLE hNewConsole = CreateConsoleScreenBuffer(GENERIC_WRITE | GENERIC_READ,
    2.          0,
    3.          NULL, 
    4.          CONSOLE_TEXTMODE_BUFFER,
    5.          NULL);

     

    ------------------------------------可选项:隐藏光标---------------------------------------

    1.         CONSOLE_CURSOR_INFO cci = {1, 0};
    2.         SetConsoleCursorInfo(hNewConsole, &cci); 

    ---------------------------------写入你想要显示的东西---------------------------------------

     WriteConsole(hNewConsole, "这里是字符串", strlen(p), NULL, NULL);

    ------------------------------------------激活--------------------------------------------------

    1.         SetConsoleActiveScreenBuffer(hNewConsole);
  • 相关阅读:
    Linux注意到Makefile
    coco2dx c++ HTTP实现
    怎么样putty打开图形化管理工具,在终端上
    javabean总结
    发布Ubuntu/Linux系统cache,增加可用内存空间
    Java获得正则表达式
    uva 11992 为矩阵更新查询段树
    oracle在schema是什么意思?
    zoj 3288 Domination (可能dp)
    学习算法
  • 原文地址:https://www.cnblogs.com/xdblog/p/4783364.html
Copyright © 2011-2022 走看看