问题描述
我正在用 C++ 编写一个带有 ncurses 的打字游戏,我注意到有 cbreak()
和 halfdelay()
函数可以切换 ncurses 中的文本输入模式。
我知道 cbreak()
用于在读取字符时禁用行缓冲,而 cbreak()
和 halfdelay()
之间的区别是 halfdelay()
带一个参数来阻塞 X 十分之一。
我很好奇如果我将 cbreak()
与 timeout()
一起使用会怎样,它是否像 halfdelay()
一样工作?
我做了一个实验来看看它们的区别:
使用halfdelay()
:
#include <ncurses.h>
int main()
{
initscr();
halfdelay(10); // blocking for 1s
getch();
endwin();
}
使用 cbreak()
和 timeout()
:
#include <ncurses.h>
int main()
{
initscr();
cbreak();
timeout(1000); // blocking for 1s
getch();
endwin();
}
我发现这两种行为都在等待一个字符并立即退出程序,直到超过 1 秒,所以我想问一下它们在 ncurses 上是否有区别?
解决方法
halfdelay 例程用于半延迟模式。与cbreak非常相似,但在阻塞了十分之几秒后,如果没有输入任何内容,则返回ERR(错误流)。
您可以在此处找到有关它的更多信息:Link