首页 > 解决方案 > ncurses中的nodelay()和cbreak()有什么区别?

问题描述

ncursesnodelay()和in 和有什么不一样?cbreak()为什么要使用这些功能,因为我们有getch()!如果我理解getch()允许在用户击键后直接获取密钥。所以nodelaycbreak是没用的,不是吗?

标签: cncurses

解决方案


它们是两个完全不同的功能。

从文档中:

通常,tty 驱动程序会缓冲输入的字符,直到输入换行符或回车符。cbreak 例程禁用行缓冲和擦除/终止字符处理(中断和流控制字符不受影响),使用户键入的字符立即可供程序使用。nocbreak 例程将终端返回到正常(熟)模式。

...

nodelay 选项使 getch 成为非阻塞调用。如果没有输入准备好,getch 返回 ERR。如果禁用(bf 为 FALSE),getch 会一直等到按键被按下。

cbreak如果您想禁用行缓冲也是如此,您可能出于多种原因想要这样做。一是避免fflush(stdout)每次打印后都必须使用。启用行缓冲后,在打印换行符之前,通常不会在屏幕上看到打印输出。

的描述nodelay非常不言自明。getch不会等待,但无论是否按下任何键都会立即返回。


推荐阅读