ネットワークで動作するアプリケーションを作成しています。GUI として rubyqt を使用しています。サーバーが起動しているかどうかを判断するには、(net/ping を使用して) 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 部分を外部プログラムに入れ、ステータス (アップ/ダウン) をファイルに書き込み、実際のプログラムがそれを読み取ることを考えていましたが、この解決策は少しぎこちないようです。