2011-06-16 10 views
1

私はShoesを学びたいと思っており、SQLスクリプトを1行ずつ実行する簡単なGUIを作ることに決めました。RubyシューズとMySQL:GUIがフリーズします。スレッドを使用すべきですか?

私の問題は、私の機能を実行するボタンを押しているGUIで、スクリプトを実行するために関数がかかる時間にGUIがフリーズすることです。

長いスクリプトでは、数分かかることがあります。

誰かが同様の問題(http://www.stackoverflow.com/questions/958662/shoes-and-heavy-operation-in-separate-thread)を持っていて、ちょうどThreadの下に集中的なものを置くことが示唆されていました:以前に言及したスレッドのmath-codeをコピーしてmysql-codeを置き換えると、おそらく、私がmysql-adapterをどのように使用しているかという問題を示唆しているでしょうか?

は、以下のコードの簡易版である:

problem.rb:


# copy the mysql-gem if not in gem-folder already 
Shoes.setup do 
    gem 'mysql' 
end 

require "mysql" 

# the function that does the mysql stuff 
def someFunction 

    con = Mysql::real_connect("myserver", "user", "pass", "db") 

    scriptFile = File.open("myfile.sql", "r") 
    script = scriptFile.read 
    scriptFile.close 
    result = [] 

    script.each_line do |line| 
    result << con.query(line) 
    end 

    return result 
end 

# the Shoes app with the Thread 
Shoes.app do 
    stack do 
    button "Execute someFunction" do 
     Thread.start do 
     result = someFunction 
     para "Done!" 
     end 
    end 
    end 
    stack do 
    button "Can't click me when GUI is frozen" do 
     alert "GUI wasn't frozen?" 
    end 
    end 
end 
+0

ここでの質問は何ですか? – sml

答えて

1

私は問題ではない、オペレーティング・システムによって、ルビーによって行われたスケジューリングから生じると思います。おそらくシューズ+ mysqlの特別なケースです。

回避策として、私はあなたがスクリプトのための別のプロセスを生成し、プロセス間のソケットまたはファイルベースの通信を使用することをお勧めします。

関連する問題