From: nobu.nakada@... Date: 2000-09-08T01:50:34+09:00 Subject: [ruby-dev:10863] Re: Ctrl+C on win32 console <- Re: ruby-1.6.0-20000901.i586-mswin32.lzh なかだです。 At Fri, 8 Sep 2000 00:28:27 +0900, arton wrote: > すみません、またまた私のミスリードらしいです。 > > + con.ContextFlags = CONTEXT_CONTROL; > + GetThreadContext(rb_MainThreadHandle, &con); > > のCONTEXT_CONTROLでは、制御レジスタしか取れませんでした。僕が使ったとき > は、それだけあればコト足りたので(汗) もともと arton さんのはハンドラとして最小限の実装ということで すから、そこは了解してます。 > #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER |\ > CONTEXT_SEGMENTS) > > なので、 > con.ContextFlags = CONTEXT_FULL | CONTEXT_FLOATING_POINT; > は、最低、設定しないとだめでした。申し訳ない。 一応これで試したつもりなんですが、というか、メインスレッドの SuspendThread() されたところにブレークポイントをおいてみると、 SetThreadContext()、ResumeThread() で戻ったところまでは意図した 通りにレジスタ値も復元されてるんです。 > > あと、InfoViewer で signal() のとこを読むと、「システムコールすんな」 > > と書いてあるような気がしてならないんですが…SetThreadContext() でうまく > > いかないのはこのためでしょうか。 > > NTはわかりませんが、9xではカーネルが16ビットで再入ができない仕組みなの > で、カーネル関数呼び出し中に入ろうとするとデッドロックするとかが理由じゃ > ないでしょうか? 最初メインスレッドで SetThreadContext() させたときは戻り値の 方が優先されるのかとも思ったんですが、それも違うような。という か、NT で試してます。 # なんかこのヘン、POSIX サブシステムって一体どこいったんだー!っ # て感じ。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦