【问题标题】:Refresh Behaviour (nCurses)刷新行为 (nCurses)
【发布时间】:2018-11-11 17:59:41
【问题描述】:

我最近在研究 ncurses,一个疑问突然袭来:刷新功能到底是做什么的?

我对其进行了一些搜索,阅读了一些教程甚至文档,我的结论是,它使用“缓冲屏幕”上的格式“刷新”了实际屏幕(它只是更新了屏幕上的输出)。

做了一些测试,我清楚地意识到我错了,因为输出显示有和没有刷新功能!下面有一个简单的程序我只是为了测试它,我无法实现这个函数的实际功能。

#include <ncurses.h>
#include <string.h>

int main() {
  char mesg[] = "Just a String";
  int row, col;

  initscr();
  getmaxyx(stdscr, row, col);

  while(true) {
    refresh();
    mvprintw(row/2, (col - strlen(mesg))/2, "%s", mesg);

    mvprintw(row-2, 0, "This screen has %d rows and %d columns\n", row, col);

    char c = getch();
    if (c == 'e') { row++; }
    else if (c == 'q') { row--; }
    else if (c == 'a') { col--; }
    else if (c == 'd') { col++; }
  }

  getch();
  endwin();

  return 0;
}

我在整个程序中移动了刷新,我删除了它,但似乎没有任何改变。它到底是做什么的??

【问题讨论】:

  • 可能与平台有关。 ncurses 适用于一系列平台,其中一些可能不支持临时写入,而只支持完全重写。它是开源的,因此您可以检查实际代码。

标签: c ncurses


【解决方案1】:

getch 函数调用 refresh,当您移动对 @ 的显式调用时,这可能会让您感到困惑987654323@到不同的地方。

Curses 函数写入 虚拟 屏幕(即非真实屏幕)并且 refresh 更新 物理 屏幕(真实屏幕)通过比较两者并进行小的更改(如果可能)。

【讨论】:

    猜你喜欢
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 2021-05-14
    相关资源
    最近更新 更多