在块内增加timeout.rb计时器

时间:2012-01-29 02:21:40

标签: ruby timeout

我正在与带LCD的RS232键盘通信。在每个按键上,我写下按下LCD的键,以便向用户提供反馈。

如果在10秒内没有按下任何键,我想放弃等待输入。

如果用户没有在10秒内输入多字符值,我写了一些会超时的代码,我宁愿做的是在每次按键后给用户另外10秒钟完成输入。< / p>

这可以使用timeout.rb吗?

require 'rubygems'
require 'serialport'
require 'timeout'

sp = SerialPort.new('/dev/tty.usbserial', 9600, 8, 1, SerialPort::NONE)

sp.write("Input:")

begin
   timeout(10) do
      input = ""
      sp.each_byte do |byte|
         #call to increase timeout.rb timer would go here
         input << byte.chr
         sp.write("Input:" + input)
      end
   end
rescue Timeout::Error
   puts "Timed out!"
   exit
end

puts input

1 个答案:

答案 0 :(得分:1)

我找到了另一种使用Threads代替timeout.rb来达到预期效果的方法,但有兴趣学习替代方法。

require 'rubygems'
require 'serialport'

sp = SerialPort.new('/dev/tty.usbserial', 9600, 8, 1, SerialPort::NONE)

sp.write("Input:")

input = ""
timer = Time.now + 10

t = Thread.new do
  sp.each_byte do |byte|
    timer = Time.now + 10
    input << byte.chr
    sp.write("Input:" + input)
  end
end

t.kill unless Time.now < timer while t.alive?