【发布时间】:2013-02-15 17:05:27
【问题描述】:
doupdate() 和 refresh() 有什么区别?
似乎refresh () 可以替换doupdate(),但是除非调用refresh(),否则不会出现文本。
另外,refresh() 是否刷新所有窗口,还是应该为每个窗口调用refresh(),即在面板内?
【问题讨论】:
doupdate() 和 refresh() 有什么区别?
似乎refresh () 可以替换doupdate(),但是除非调用refresh(),否则不会出现文本。
另外,refresh() 是否刷新所有窗口,还是应该为每个窗口调用refresh(),即在面板内?
【问题讨论】:
来自 Dan Gookin 的 Programmer's Guide to NCurses(第 513 页):
NCurses 中的刷新操作由两部分组成:
- 首先,NCurses 获取窗口中已更改或触摸的部分,并从窗口数据中写入这些部分
结构到内存中的虚拟屏幕。- 其次,终端上显示自上次刷新后触摸的虚拟屏幕的内容。
将信息从窗口数据结构复制到虚拟 屏幕由 wnoutrefresh() 函数执行。的更新 终端的虚拟屏幕由另一个函数处理, 更新()。它们一起构成了 refresh() 或 wrefresh() 调用。
使用 wnoutrefresh() 的优势在于 更新多个窗口。在这种情况下,反复调用 wnoutrefresh() 后跟一个 doupdate() 调用更多 比一系列 wrefresh() 调用更有效,而且它导致更少 闪烁。
就面板而言,它们是窗口的一种包装器(因此每个面板只有一个窗口)。调用update_panels()(按照面板给出的正确堆叠顺序将窗口写入虚拟屏幕)然后doupdate() 将虚拟屏幕输出到终端就足够了。
如果您想进一步划分面板,请考虑使用子窗口。
【讨论】: