如何在rubyqt应用程序中执行ping操作,以便GUI不会冻结?

时间:2009-06-05 09:41:45

标签: ruby user-interface qt freeze

我正在编写一个应用程序,它可以与网络一起使用。 作为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部分放在一个外部程序中,该程序将状态(向上/向下)写入文件中,然后实际程序读取该文件,但这个解决方案似乎有点笨拙。

1 个答案:

答案 0 :(得分:0)

您是否考虑过完全从请求中抽象出该操作?如果将昂贵的操作移动到外部库,您可以轻松地将其排队并使用delayed_job(http://github.com/tobi/delayed_job/tree/master)之类的命令执行它,这样就可以消除停止请求的风险。

也许这就是你要找的......?