我正在运行一个循环,在其中使用“gets.chomp”命令等待用户响应。我该如何将其与睡眠/定时器命令结合起来呢?
例如,我希望它等待1分钟,以便用户输入一个单词,否则它将继续返回循环。
例如,我希望它等待1分钟,以便用户输入一个单词,否则它将继续返回循环。
Timeout
。require 'timeout'
status = Timeout::timeout(5) {
# Something that should be interrupted if it takes too much time...
}
我认为上面的Timeout方法可能是解决这个问题最优雅的方式。在大多数编程语言中,另一种可用的解决方案是使用select
。你需要传递一个要监视的文件描述符列表和一个可选的超时时间。代码不太简洁:
ready_fds = select [ $stdin ], [], [], 10
puts ready_fds.first.first.gets unless ready_fds.nil?
def gets_or_timeout(to)
# Use thread and time limit to wait for a key or refresh after time if no key is hit.
t=Thread.new{ print "\n> "; gets}
t.join(to) #wait for end or number of seconds
t.kill
end
...
gets_or_timeout(60)
...