0

我正在编写一个应用程序,它将与网络一起使用。作为一个 GUI,我使用的是 ruby​​qt。要确定服务器是否启动,我必须 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 尚未与 ruby​​qt 一起使用,是否有人有想法让 GUI 不会冻结(除了减少超时)?

我正在考虑将 ping-part 放在一个外部程序中,该程序将状态(向上/向下)写入文件中,然后实际程序读取该文件,但这个解决方案似乎有点笨拙。

4

1 回答 1

0

您是否考虑过从请求中完全抽象出该操作?如果您将成本高昂的操作移至外部库,您可以轻松地将其排队并使用诸如延迟作业(http://github.com/tobi/delayed_job/tree/master)之类的东西执行它,这将消除它暂停请求的风险一点也不。

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

于 2009-06-13T22:32:44.810 回答