C ++如何在有限的时间内等待键盘输入

时间:2015-09-16 16:23:24

标签: c++ keyboard ncurses

我希望我的控制台应用程序停止并等待用户按下某个键。如果在有限的时间后没有键盘输入,让我们说2秒,应该恢复执行。

我知道没有解决方案可以在所有实现中移植,但是至少有简单的解决方案吗?

this onethis one等帖子会处理类似的问题,但似乎并没有为这个问题提供答案。

如果我可以使用ncurses(我不能这样做),我会使用getch()timeout()函数执行类似的操作:

#include <ncurses.h>
int main()
{
    initscr();          // Start curses mode
    cbreak();           // Turn off line buffering
    timeout(2000);      // Wait 2000 ms for user input
    while (true) {
        addstr("You have 2 sec. to press 'q', otherwise ...\n");
        refresh();
        int inKey = getch();
        if (inKey == 'q') break;
    }
    endwin();
    return 0;
}

1 个答案:

答案 0 :(得分:1)

这样做的一种方法是使用低级read()(假设你在Posix上)与超时信号耦合在一起。由于read()将在信号处理后以EINTR退出,因此您知道已达到超时。