doupdate()
和refresh()
之间有什么区别?
refresh ()
似乎可以代替doupdate()
,但除非调用refresh()
,否则不会显示文字。
此外,refresh()
刷新所有窗口,还是应该为每个窗口调用refresh()
,这是在面板内?
答案 0 :(得分:4)
来自Dan Gookin的Programmer's Guide to NCurses(第513页):
NCurses中的刷新操作由两部分组成:
- 首先,NCurses获取已经改变或触摸的那些窗口部分,并从窗口数据中写出这些部分 结构到内存中的虚拟屏幕。
- 其次,自上次刷新以来触摸的虚拟屏幕的内容显示在终端上。
将信息从窗口数据结构复制到虚拟 屏幕由wnoutrefresh()函数执行。更新 到终端的虚拟屏幕由另一个功能处理, doupdate()。它们一起构成了refresh()或的两个组件 wrefresh()调用。
使用wnoutrefresh()的好处来自何时 更新多个窗口。在那种情况下,反复拨打电话 wnoutrefresh()后跟一个单独的doupdate()调用更多 比一系列wrefresh()调用高效,加上它导致更少 闪烁。
就面板而言,它们是窗口的包装(因此每个面板只有一个窗口)。调用update_panels()
(按照面板给出的正确堆叠顺序将窗口写入虚拟屏幕),然后doupdate()
将虚拟屏幕输出到终端就足够了。
如果您想进一步划分面板,请考虑使用子窗口。