Как сделать пинг в приложении rubyqt, чтобы графический интерфейс не зависал? - PullRequest
0 голосов
/ 05 июня 2009

Я пишу приложение, которое будет работать с сетями. В качестве графического интерфейса я использую rubyqt. Чтобы определить, работает ли сервер, я должен пропинговать его (с помощью 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 еще не работает с rubyqt, у кого-нибудь есть идея, чтобы графический интерфейс не зависал (кроме сокращения времени ожидания)?

Я думал о том, чтобы поместить ping-часть во внешнюю программу, которая записывает состояние (вверх / вниз) в файл, который затем читает реальная программа, но это решение кажется немного неуклюжим.

1 Ответ

0 голосов
/ 14 июня 2009

Рассматривали ли вы абстрагирование этой операции от запроса в целом? Если вы перенесете дорогостоящую операцию во внешнюю библиотеку, вы можете легко поставить ее в очередь и выполнить, используя что-то вроде delayed_job (http://github.com/tobi/delayed_job/tree/master), что устранит риск того, что запрос вообще будет остановлен.

Может быть, это то, что вы ищете ...?

...