From: ttate@... Date: 1998-06-20T08:15:54+09:00 Subject: [ruby-list:8436] tk demo (timer) & after 立石@JAISTです。 デモのTimerができました。 以前と同じように http://www.pluto.dti.ne.jp/~tateishi/ftp/ruby-tk-demo/ においておきます。 これを作成の際にafterが動作しなかったので tk.rbを修正しました。 以下がパッチですが、あまり自信は ないです。一応ちゃんと動作してる ようですが、、、、 (ruby-1.1b9_27を元に作成してます。) Threadを使ってもよかったのですが、こちらだと 直接tclのコマンドを呼ぶわけじゃないのでスピード を要求されるようなものには不向きでした。 *** tk.rb Sat Jun 20 07:54:13 1998 --- tk.rb.new Sat Jun 20 07:44:47 1998 *************** *** 284,312 **** TkGrid.configure *args end - def after(ms, cmd=Proc.new) - myid = _curr_cmd_id - INTERP._eval('after '+ms+' '+_get_eval_string(install_cmd(proc{ - TkUtil.eval_cmd cmd - uninstall_cmd myid - }))) - return - if false #defined? Thread - Thread.start do - ms = Float(ms)/1000 - ms = 10 if ms == 0 - sleep ms/1000 - cmd.call - end - else - myid = _curr_cmd_id - INTERP._eval('after '+ms+' '+_get_eval_string(install_cmd(proc{ - TkUtil.eval_cmd cmd - uninstall_cmd myid - }))) - end - end - def update(idle=nil) if idle tk_call 'update', 'idletasks' --- 284,289 ---- *************** *** 323,328 **** --- 300,323 ---- INTERP = TclTkIp.new INTERP._invoke("proc", "rb_out", "args", "ruby [format \"TkCore.callback %%Q!%s!\" $args]") + + def after(ms, cmd=Proc.new) + myid = _curr_cmd_id + cmdid = install_cmd(cmd) + tk_call("after",ms,cmdid) + return + if false #defined? Thread + Thread.start do + ms = Float(ms)/1000 + ms = 10 if ms == 0 + sleep ms/1000 + cmd.call + end + else + cmdid = install_cmd(cmd) + tk_call("after",ms,cmdid) + end + end def TkCore.callback(arg) arg = Array(tk_split_list(arg))