Я пытаюсь изучить Shoes и решил создать простой графический интерфейс для построчного запуска SQL-скрипта.
Моя проблема в том, что в GUI нажатие кнопки, которая выполняет мою функцию,замораживает графический интерфейс на время, необходимое для выполнения скрипта.
При использовании длинных сценариев это может занять несколько минут.
У кого-то возникла аналогичная проблема (http://www.stackoverflow.com/questions/958662/shoes-and-heavy-operation-in-separate-thread), и было предложено просто поместить интенсивные материалы в поток: если я скопируюМатематический код из ранее упомянутого потока и заменить мой MySQL-код GUI работает без замораживания, так что, вероятно, намекает на проблему с тем, как я использую MySQL-адаптер?
Ниже приведена упрощенная версиякод:
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