鞋子和重型操作在单独的线程

时间:2009-06-06 00:27:39

标签: multithreading shoes

有没有办法在不同的线程中对鞋子进行繁重的操作,以便在操作完成之前GUI不会冻结? (smth。类似于下载但更通用,如Swing中的SwingWorker.class)。

我尝试了以下内容:

Thread.start { <heavy operation block is here> }

但这没有帮助。看起来鞋子主线仍然受到影响。

提前多多感谢!

1 个答案:

答案 0 :(得分:1)

如果没有看到您的代码,我就无法给您任何具体的指导。但是这个代码对我来说效果很好。请注意,如果在对话框启动时完成繁琐的计算,则在关闭对话框后的几分钟内您将看不到结果;对话框启动时,鞋子不会更改窗口AI。试一试,看看它的表现如何,我们将从那里开始。

Shoes.app do

  @window_slot = stack do
    button('Tell me about ponies') do
      @window_slot.append { para 'OMG PONIES!' }
    end
    button('I like dialogs') { alert 'I like dialogs, too!' }
    button('Does this button make things slow?') do
      Thread.new do
        @window_slot.append { para 'Why did you click that?  Are you crazy?!' }

        #Let's do a bunch of calculations!
        arr = []
        sum = 0
        0.upto(10000) do |i|
          0.upto(1000) do |j|
            sum += j
          end
          arr << sum
        end

        @window_slot.append { para arr.join(' ') }
      end
    end
  end
end