我正在编写一个应用程序,它将与网络一起使用。作为一个 GUI,我使用的是 rubyqt。要确定服务器是否启动,我必须 ping 它(使用 net/ping)。但是我遇到了一个问题。如果服务器关闭,GUI 会因超时而冻结,即使我将代码放入 Thread 或 IO.popen 循环中也是如此。
Thread.new('switch') do
if Net::PingExternal.new("195.168.255.244",timeout=0.9).ping then
down = false
else
down = true
end
end
将冻结 0.9 秒。由于 QtThreads 尚未与 rubyqt 一起使用,是否有人有想法让 GUI 不会冻结(除了减少超时)?
我正在考虑将 ping-part 放在一个外部程序中,该程序将状态(向上/向下)写入文件中,然后实际程序读取该文件,但这个解决方案似乎有点笨拙。