为 getchar() 添加超时
我需要在程序中为 getchar() 添加超时函数。
我该怎么做才能让我的程序到达指令 getchar() 时,只会等待一定的时间让用户进行击键,如果用户在给定的时间限制内没有进行击键,则程序会“跳过” getchar() 吗?
操作系统不支持 conio.h 库,因此 kbhit 不是一个选项。
I need to add a timeout function for getchar() in my program.
What do I do so that when my program reaches the instruction getchar(), it will only wait for a certain amount of time for the user to make a keystroke and if the user does not make a keystroke within the given time limit, the program will "skip" the getchar()?
The operating system does not support the conio.h library so kbhit is not an option.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这通常是通过在
stdin
上使用select()
来实现的。另一种解决方案是使用alarm()
和虚拟 SIGALRM 处理程序来中断getchar()
调用(但仅适用于 POSIX 系统)。This is usually achieved by using
select()
onstdin
. Another solution would be usingalarm()
and a dummy SIGALRM handler to interrupt thegetchar()
call (only working on POSIX systems though).如何在从“stdin”读取时添加超时
我发现这个问题很有帮助。
另一种方法是使用多线程。
如果您使用的是 c++11,则可以使用
condition_variable::wait_for()
作为计时器线程。原来的 getchar() 在另一个线程上阻塞。下面是一个例子:
当有按键时,主线程会通知工作线程。
How to add a timeout when reading from `stdin`
I found this question is helpful.
Another method is using multithreading.
If you are using c++11, you can make use of
condition_variable::wait_for()
as a timer thread. And the original getchar() is blocking on another thread.Here is an example:
When there is a keystroke, main thread will notify the worker thread.