Rubyでスレッドプログラミングその3
というわけで、3回目。
今回はマルチスレッディングで。
3つのスプライトを生成して時計を3つ表示するという無駄な(爆)プログラムです。
というわけで、↓へ続く。
#スレッドを使った時計サンプル #2008.03.27 Cyross Makoto require 'Miyako/miyako' require 'Miyako/idaten_miyako' include Miyako @font = Font.sans_serif @font.size = 32 #時間を描画するスレッドを作成 @proc = Proc.new{|font, y| Thread.current[:finish] = false base = Sprite.new(:size=>[400,40], :type=>:ac) base.left.top{|body| y}.show until Thread.current[:finish] do begin base.fill([0,0,0,0]) font.draw_text(base, Time.now.strftime("ただいまの時刻 %H:%M:%S"), 0, 0) rescue Thread.exit ensure Thread.pass end end base.hide } list = [] 3.times{|n| list << Thread.new(@font, 40*n, &@proc) } #ここでは、Screen.upを呼び出した後に処理を加える #必要があったので、#Miyako.main_loopを使わずloopを使用。 loop do Input.update break if Input.quit_or_escape? Screen.update Thread.pass # 生きているスレッドに実行件を渡す end list.each{|th| th[:finish] = true # 終了フラグを渡す th.join }
これで実行エイヤッ
・・・。
うーん、3つ同時に時計が動いている(時間がちゃんと進んでいる)けど
やっぱりちらつく。どうやったらええんやろか。添削求ム。