wxruby и rubymsn

В настоящее время я играю с wxRuby и RubyMSN, чтобы научиться программировать desktop-программы. Я знаю, что это трудная задача, а не просто создание блокнота и т. Д., Но мне нужна более сложная задача, чем блокнот.

Теперь мне удается использовать их самостоятельно, но я не могу заставить их работать вместе. Проблема в петле.

RubyMSN хочет иметь бесконечный цикл, как

while true
  sleep 1
end

или используя mainloop GUI или что-то

В настоящее время у меня есть этот код в качестве цикла

TheApp.new.main_loop()
while true
  sleep 1
end

У меня работает мое окно, а main_loop что-то делает. Но я не могу войти, как будто у меня нет цикла (из учебника), я получаю только одну строку отладки. Но как только я закрываю окно и позволяю бесконечному циклу выполнять свою работу, он работает как шарм.

Кто то?

1 ответ

Решение

Работал на меня. Попробуйте это: скопируйте minimal пример из дистрибутива wxruby и измените minimal.rb так что вы запускаете поток msn непосредственно перед главным циклом wx:

require 'msn/msn'

conn = MSNConnection.new("rubybot@channelwood.org", "secretpassword123")
conn.start

# Wx::App is the container class for any wxruby app. To start an
# application, either define a subclass of Wx::App, create an instance,
# and call its main_loop method, OR, simply call the Wx::App.run class
# method, as shown here.
Wx::App.run do 
  self.app_name = 'Minimal'
  frame = MinimalFrame.new("Minimal wxRuby App")
  frame.show
end

Вам нужно будет символическую ссылку msn каталог внутри minimal каталог, чтобы получить требуемый оператор работает, конечно.

Вам не нужно while true {sleep 1} петля; это просто для предотвращения выхода из программы, чтобы ваш поток MSN мог продолжать работать. Основной цикл wx выполняет ту же задачу.

Другие вопросы по тегам