我正在与带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
答案 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?