まつもと ゆきひろです

In message "[ruby-ext:00214] Interrupt"
    on 99/05/26, Keisuke CHIBA <chiba / lab.imagica.co.jp> writes:

|拡張ライブラリで定義したメソッドで, 処理に時間のかかるものが
|あって, 実行中に ^C あるいは Delete が押されたら中断するよう
|にしたいのですが, どうしたらよいでしょうか.

原則としてCで記述されたメソッド実行中には割込みは発生しない
ようになっています.

対処方法は

  (1) "rubysig.h"をincludeして,時々 CHECK_INTS; を呼び出し
      て明示的に割込みチェックを行う

  (2) 処理時間の長いメソッドの前後でsignalを呼び,一時的にハ
      ンドラを付け替える

が考えられます.前者の方がちょっと楽でしょうけど.なお,
rb_rescue()は StandardError しか捕捉しませんので,Interrupt
を捕捉したい場合には rb_protect() の方が良いかもしれません.
あるいは例外処理はRubyレベルで行うか.

                                まつもと ゆきひろ /:|}