[#24112] ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。原因を追求してたのですが、力尽きました。

19 messages 2004/08/18
[#24127] Re: ruby/tk crashes on bcc32 — Hidetoshi NAGAI <nagai@...> 2004/08/19

永井@知能.九工大です.

[#24131] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。

[#24135] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。試行錯誤の結果、これで落ちなくなりました。

[ruby-dev:24131] Re: ruby/tk crashes on bcc32

From: "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
Date: 2004-08-19 08:12:00 UTC
List: ruby-dev #24131
山本です。

>「Tcl/Tk のスクリプトも同じ挙動」というのは
>このスクリプトを Tcl/Tk で動かした際にも
>「Ruby/Tk の場合と同様にボタンを何度か押すと落ちる」
>ということでしょうか?

すみません、書き方があいまいでした。mswin32と同様という意味で、

bcc32 => 落ちる
mswin32, tcl/tk => 落ちない

です。

HEAD や ruby-1.8.2 の bccwin32 でも、

require "tk"

$canvas = TkCanvas.new {
   pack
}

TkButton.new {
   text "click"
   command {
      GC.disable
      1000.times {|i| c = TkcRectangle.new($canvas, 100, 100, 200, 200); $canvas.delete(c) }
      GC.start
   }
   pack
}

Tk.mainloop

とすると何度押しても落ちないので、スレッドや GC でタイミング悪く何かが起こって落ちているのでは
ないかという気がします。GC.disable, GC.start を外すと一度か二度で落ちます。

($canvas.delete は長方形がオブジェクトで、キャンバスに残ってしまうのを知らなかったので追加しました。
  「mswin32だとしばらく固まったようになりますが」はこれが原因でした。
  $canvas.delete の有無は落ちる・落ちないには関係しません)


In This Thread