From: arton Date: 2000-08-30T19:33:29+09:00 Subject: [ruby-dev:10748] Re: ruby-1.6.0-20000824.i586-mswin32 bug artonです。 メインスレッドのハンドルが取れれば(というか、あらかじめruby_init()で保 存する感じ)、 SuspendThread(handle); で、メインスレッドを停止させて、 ---- こっから、イディオムなのでそのまま記述--- CONTEXT con; ZeroMemory(&con, sizeof(CONTEXT)); con.ContextFlags = CONTEXT_CONTROL; GetTHreadContext(handle, &con); とやって、メインスレッドのコンテキストを取得してきて、 FARPROC proc = PCを設定させる。適当な関数ポインタでいいでしょう。その関 数で、 longjumpなり、rb_raise()なり実行する。 con.ContextFlags = CONTEXT_CONTROL; con.Eip = (long)proc; // 別に2行上と分ける必要はないんですが、x86だと CONTEXT              構造体のEipで、PCを設定する。他のCPUは知りませ ん。 SetThreadContext(handle, &con); と用意してから、 ResumeThread(handle); で、今設定したPCから再開させるという感じでいけるんではないでしょうか? #パッチ作るほど、signal.cの中身をみたわけじゃないので、情報オンリーです が。