Ruby+Windows+Timeout+SerialPorts无法工作
我正在开发一个多平台Ruby程序,该程序应该通过USB连接到串行设备。 首先我使用的是SerialPortGem1.0.4,但后来我遇到了一些奇怪的问题,不得不放弃它。 然后,我继续通过Ruby的IO类进行通信,如下所示:Ruby+Windows+Timeout+SerialPorts无法工作,ruby,windows,timeout,serial-port,Ruby,Windows,Timeout,Serial Port,我正在开发一个多平台Ruby程序,该程序应该通过USB连接到串行设备。 首先我使用的是SerialPortGem1.0.4,但后来我遇到了一些奇怪的问题,不得不放弃它。 然后,我继续通过Ruby的IO类进行通信,如下所示: @port = IO.new IO.sysopen(path, mode), mode 在Linux和Windows中,通过syswrite和sysread进行通信都是完美的 通信完成后,我尝试设置超时,以便在发生任何失同步时程序不会挂起。所有这些都是通过timeout.r
@port = IO.new IO.sysopen(path, mode), mode
在Linux和Windows中,通过syswrite和sysread进行通信都是完美的
通信完成后,我尝试设置超时,以便在发生任何失同步时程序不会挂起。所有这些都是通过timeout.rb在Linux端完成的,但是在调用任何IO读取方法sysread、getc、gets、getbyte之后,Windows将无法让我再次控制解释器。。。我都试过了
我尝试了Terminator,但它甚至不会运行,抛出参数异常而不是超时——即使在Linux中也是如此
require 'terminator'
Terminator.terminate 2 do
sleep 4
end
产生:
/var/lib/gems/1.9.1/gems/terminator-0.4.4/lib/terminator.rb:164: Use RbConfig instead of obsolete and deprecated Config.
ArgumentError: wrong number of arguments (1 for 0)
from /var/lib/gems/1.9.1/gems/terminator-0.4.4/lib/terminator.rb:127:in `block in terminate'
from (irb):12:in `call'
from (irb):12:in `sleep'
from (irb):12:in `block in irb_binding'
from /var/lib/gems/1.9.1/gems/terminator-0.4.4/lib/terminator.rb:134:in `call'
from /var/lib/gems/1.9.1/gems/terminator-0.4.4/lib/terminator.rb:134:in `terminate'
from (irb):11
from /usr/bin/irb:12:in `<main>'
我试过了
begin
Timeout::timeout 0.5 do
Thread.new do
gets
end.join
end
rescue
"Expired :)"
end
而且在IRB上似乎还不错
我将实现并测试它,然后将结果发布在这里:
然而,任何更漂亮的解决方案都是非常受欢迎的 如果我有同样的问题,我会做同样的,新的线程如果我有同样的问题,我会做同样的,新的线程
begin
Timeout::timeout 0.5 do
Thread.new do
gets
end.join
end
rescue
"Expired :)"
end