【问题标题】:How to do pings in a rubyqt application so the GUI doesn't freeze?如何在 ruby​​qt 应用程序中执行 ping 操作以使 GUI 不会冻结?
【发布时间】:2009-06-05 09:41:44
【问题描述】:

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

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

【问题讨论】:

    标签: ruby user-interface qt freeze


    【解决方案1】:

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

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

    【讨论】:

    • delayed_job 库不是我需要的,它只会将请求排队。但是这种行为是不可接受的(而且我认为永远不会有 dj 可以发送 ping 的空闲时间段),因为必须每秒发送 ping。我将 ping 导出到外部程序(通过文件进行数据交换),效果很好,但我更喜欢 1 个程序中的所有功能。
    猜你喜欢
    • 1970-01-01
    • 2017-12-10
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    相关资源
    最近更新 更多