[#10793] 今度こそ (patch of the ruby-1.4.6 for NT4.0&VC4.0 on DEC Alpha.) — kou@...1609.sip.eee.yamaguchi-u.ac.jp (Koichi Okada)

岡田です。

10 messages 2000/09/01

[#10920] SIGINT on windows — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

17 messages 2000/09/14
[#11077] Re: SIGINT on windows — matz@... (Yukihiro Matsumoto) 2000/09/27

まつもと ゆきひろです

[#10944] dummy DLL on Windows — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

19 messages 2000/09/18
[#10955] Re: dummy DLL on Windows — WATANABE Hirofumi <eban@...> 2000/09/19

わたなべです.

[#10963] Re: dummy DLL on Windows — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/09/19

なかだです。

[#10964] Re: dummy DLL on Windows — WATANABE Hirofumi <eban@...> 2000/09/19

わたなべです.

[#10978] [PATCH] require in require — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

15 messages 2000/09/20

[#10985] httphead.rb proxy version problem — Katsuyuki Komatsu <komatsu@...>

小松です.

16 messages 2000/09/20
[#10989] Re: httphead.rb proxy version problem — Minero Aoki <aamine@...> 2000/09/20

あおきです。

[ruby-dev:10857] Re: Ctrl+C on win32 console <- Re: ruby-1.6.0-20000901.i586-mswin32.lzh

From: "Nobuyoshi.Nakada" <nobu.nakada@...>
Date: 2000-09-07 08:05:54 UTC
List: ruby-dev #10857
なかだです。

At Thu, 7 Sep 2000 13:53:13 +0900
ARIMA Yasuhiro <fit0298@fitec.co.jp> wrote:
> |   Ctrl+C でフラグを立てて次の適当な時点で CHECK_INT する、というのは 9/4 
> | に試した方法なんですが、たとえば sleep してたりすると「次の適当な時点」と
> | いうのが来なかったりします。signal() というのは非同期イベントなんですが、
> | Windows はもともと event driven & cooperative multithread なシステムなの
> | で、非同期に他のスレッドに割り込む方法は(TerminateThread() などの非常手段
> | 以外は)そもそも存在しないのか、とも思ってます、近頃は。
> 
> 1.6 の signal.c と win32/* を覗いてみました。
> raise() / signal() は、GenerateConsoleCtrlEvent() / SetConsoleCtrlHandler() に
> 相当するはずですが、SetConsoleCtrlHandler() が見あたりません。
> これを使えば trap できませんかね?

  VC のランタイムの winsig.c がやってます。で、sighandle() までは来るわ
けですが、割り込みスレッドのまんまでメインスレッドに割り込めないのです。

> それから、Windows 的には sleep() よりも WaitForSingleObject() の方がよいかも。

  上の sleep は Kernel#sleep の方ですが、やるとしたら、[ruby-list:23652] 
の小松さんの案をベースに myselect() で WaitForMultipleObject() を使って、
割り込み通知用の Event を含めるようにする、とかかなぁ。

# でも Busy loop には効かなさそう。

  あと、InfoViewer で signal() のとこを読むと、「システムコールすんな」
と書いてあるような気がしてならないんですが…SetThreadContext() でうまく
いかないのはこのためでしょうか。

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦


In This Thread