我正在编写一个应用程序,它可以与网络一起使用。 作为GUI我使用rubyqt。 要确定服务器是否已启动,我必须ping它(使用net / ping)。 但我遇到了一个问题。如果服务器已关闭, 即使我将代码放在Thread或IO.popen循环中,GUI也会冻结超时。
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 -ing部分放在一个外部程序中,该程序将状态(向上/向下)写入文件中,然后实际程序读取该文件,但这个解决方案似乎有点笨拙。
答案 0 :(得分:0)
您是否考虑过完全从请求中抽象出该操作?如果将昂贵的操作移动到外部库,您可以轻松地将其排队并使用delayed_job(http://github.com/tobi/delayed_job/tree/master)之类的命令执行它,这样就可以消除停止请求的风险。
也许这就是你要找的......?