我正在编写一个从串行端口读取和写入的程序。有两个线程;一个线程每 500ms 对串口进行读写,另一个线程每 3s 对串口进行一次写入。
我遇到的问题是,因为 500ms 是 3s 的倍数,在 3s、6s、9s 时……500ms 循环无法从/向串行端口读取/写入。有没有办法检查串口是否在使用中?
counter = 0
switchRelays = DoEvery([3], 20) do
sp.write "@00 WR #{relays[counter]}\r"
counter = (counter + 1) % relays.length
end
# This thread samples every 500ms.
sp.write "@00 AI 0\r"
sleep 0.2
sample500 = DoEvery([0.5], 1.0/0.0) do |timeStamp|
if switchRelays.alive? == false
csv.close
puts 'Done'
sample500.exit
else
sleep 0.1
analogueStatus = sp.readline
sp.write "@00 AI 0\r"
end
end