我希望我的控制台应用程序停止并等待用户按下某个键。如果在有限的时间后没有键盘输入,让我们说2秒,应该恢复执行。
我知道没有解决方案可以在所有实现中移植,但是至少有简单的解决方案吗?
this one或this 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;
}
答案 0 :(得分:1)
这样做的一种方法是使用低级read()(假设你在Posix上)与超时信号耦合在一起。由于read()将在信号处理后以EINTR退出,因此您知道已达到超时。