立石@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))