Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby+Windows+Timeout+SerialPorts无法工作_Ruby_Windows_Timeout_Serial Port - Fatal编程技术网

Ruby+Windows+Timeout+SerialPorts无法工作

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

我正在开发一个多平台Ruby程序,该程序应该通过USB连接到串行设备。 首先我使用的是SerialPortGem1.0.4,但后来我遇到了一些奇怪的问题,不得不放弃它。 然后,我继续通过Ruby的IO类进行通信,如下所示:

@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