【发布时间】:2012-11-28 10:51:51
【问题描述】:
我正在尝试使用串行端口 gem 读取 Ruby 中的串行端口。问题是有时没有要读取的数据,当我告诉程序读取串口时,程序挂起......我试过使用sp.read,sp.readline和sp.readlines;它们都会导致程序阻塞(在 Windows 下)。
有人知道是否有不会导致阻塞的方法吗?基本上,我希望如果没有要读取的数据,
读取结果为零。
谢谢。
【问题讨论】:
我正在尝试使用串行端口 gem 读取 Ruby 中的串行端口。问题是有时没有要读取的数据,当我告诉程序读取串口时,程序挂起......我试过使用sp.read,sp.readline和sp.readlines;它们都会导致程序阻塞(在 Windows 下)。
有人知道是否有不会导致阻塞的方法吗?基本上,我希望如果没有要读取的数据,
读取结果为零。
谢谢。
【问题讨论】:
你可以使用IO#read_nonblock:
begin
result = io.read_nonblock(maxlen)
rescue IO::WaitReadable # this is raised when there's no data in the stream
# don't wait and return nil
result = nil
end
【讨论】:
IO::EAGAINWaitReadable 应该可以工作