Ncurses:面板的doupdate()和refresh()之间的区别

Ncurses: Difference between doupdate() and refresh() for panels

本文关键字:refresh 区别 之间 doupdate Ncurses      更新时间:2023-10-16

doupdate()refresh()之间有什么区别?

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

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

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

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

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

将信息从窗口数据结构复制到虚拟屏幕由wnoutrefresh()函数执行。的更新到终端的虚拟屏幕由另一功能处理,doupdate()。它们共同构成refresh()或wrefresh()调用。

使用wnoutrefresh()的优势在于更新多个窗口。在这种情况下,重复呼叫wnoutrefresh()后面跟着一个sin-gle doupdate()调用比一系列wrefresh()调用更高效,而且它的结果更少闪烁

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

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