gpt4 book ai didi

ruby - 在 block 内增加 timeout.rb 定时器

转载 作者:太空宇宙 更新时间:2023-11-03 16:35:03 24 4
gpt4 key购买 nike

我正在与带有 LCD 的 RS232 键盘通信。在每次按键时,我都会将按下的键写入 LCD 以向用户提供反馈。

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

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

这可以使用 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

最佳答案

我找到了一种替代方法来实现预期效果,即使用 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?

关于ruby - 在 block 内增加 timeout.rb 定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9050394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com