yarv-dev:951
From: SASADA Koichi <ko1 atdot.net>
Date: Tue, 21 Feb 2006 19:56:08 +0900
Subject: [yarv-dev:951] Re: close> Re: block on exiting with living thread
ささだです。 U.Nakamura wrote: > ちょっと気になったのですが、cygwinやmswin32で、拡張ライブラリ > で while(1){} したら Thread#kill も効かない、ってことですよね? > > while(1){} に効かないのはどうでもいいんですが、長い read() と > かの間も効かなかったりしますか? 効きません。多分。 現在、Thread#kill の処理は win32/win32.c のグローバル変数 interrupted_event *ではなく*、各スレッド(各ネイティブスレッド)が持って いる yarv_thread_t#native_thread_data.interrupt_event に対して SetEvent を発生させる、という実装にしています。たとえば Ruby の sleep() はそれを 利用しているので、sleep 中でも kill で無理やりとめることは可能になってい ます。 なので、たとえば read (というか select 相当)を、スレッドごとのイベン トハンドルと混ぜて WaitForMultipleEvent() すればいいんだろーなーと思って 放置しています。その辺、どうでしょう。考えが甘い? (でも、シグナルでは起きてくれないのはどうしたもんだか) -- // SASADA Koichi at atdot dot net -- ML: yarv-dev quickml.atdot.net 使い方: http://www.atdot.net/~ko1/quickml
890 2006-02-14 19:22 [usa garbagecollect.j] open> block on exiting with living thread 947 2006-02-21 19:37 ┗[ko1 atdot.net ] 949 2006-02-21 19:46 ┗[usa garbagecollect.j] close> Re: block on exiting with living thread -> 951 2006-02-21 19:56 ┗[ko1 atdot.net ] 952 2006-02-21 20:07 ┗[usa garbagecollect.j]