3

doupdate()和 和有什么不一样refresh()

似乎refresh ()可以替换为,但是除非被调用doupdate(),否则不会出现文本。refresh()

此外,是否refresh()刷新所有窗口,或者应该refresh()为面板内的每个窗口调用?

4

1 回答 1

4

来自 Dan Gookin 的NCurses 程序员指南(第 513 页):

NCurses 中的刷新操作由两部分组成:

  • 首先,NCurses 获取窗口中已更改或触摸的那些部分,并将这些部分从窗口数据
    结构中写入内存中的虚拟屏幕。
  • 其次,在终端上显示自上次刷新后触摸的虚拟屏幕的内容。

将信息从窗口数据结构复制到虚拟屏幕是由 wnoutrefresh() 函数执行的。将虚拟屏幕更新到终端由另一个函数 doupdate() 处理。它们一起构成了 refresh() 或 wrefresh() 调用的两个组成部分。

更新多个窗口时,使用 wnoutrefresh() 的优势就来了。在这种情况下,重复调用 wnoutrefresh() 之后再调用一次 doupdate() 比调用一系列 wrefresh() 更有效,而且闪烁更少。

就面板而言,它们是窗口的一种包装器(因此每个面板只有一个窗口)。update_panels()调用(以面板给出的正确堆叠顺序将窗口写入虚拟屏幕)然后doupdate()将虚拟屏幕输出到终端就足够了。

如果您想进一步划分面板,请考虑使用子窗口。

于 2013-02-17T01:31:21.350 回答