サイトウです。
まつもとさん、なかださん、まとめレスで失礼します。

最初は、なんとなくrubyスクリプトを rb_require()とかすれば
メインスレッドが活動しつづけているような勘違いをしていたのですが、
そんなわけねえっすよね。

結局、WindowsAPIのSetTimer()により発生するイベントで
rb_thread_schedule() を呼び出すようにすると期待通りに
rubyのサブスレッドが "hello" と吐きつづけてくれるようになりました。
(ずばりウィンドウプロシージャのタイマーメッセージ中で
 rb_theread_schedule()しちゃっていますが、いまのところは動いています。)

ところで、rb_thread_schedule() はどのくらいの頻度(何ms?) で呼び出すのが
良いのでしょうか?

とりあえず、SetTimer()で設定できる解像度は 1ms なのでそれで試してみた
ところ、普通に動いているようです。
まあ、1msていうのも「努力します」という程度のはなしだと思うのですが。


なかださん>
> 
> At Mon, 06 Aug 2001 01:02:54 +0900,
> matz / ruby-lang.org (Yukihiro Matsumoto) wrote:
> > |  問題はスレッドを作るところまでではなくて、そのあとで必要なCPU
> > |タイムをどう割り当てるかということではないでしょうか。Windowsで
> > |はsetitimer()も使えませんし。
> > 
> > そうなんですか?
> 
>   なんじゃないかなー、と。事態としては、たとえば拡張ライブラリ
> でCPUを掴みっぱなしにしてるのと同じようなものではないかと。
> 
> > 状況が分からないのでナントモ。ま、いろいろやってみるのがよろ
> > しいのでは。で、発見があれば教えてください。
> 
>   ですね。てきとーな想像ですが、rb_thread_schedule()を呼ぶなら
> なるべくトップレベルの方でやった方が安心のような気がします。た
> ぶんOSからのコールバック(ウィンドウプロシージャみたいなの?)の中
> からは避けた方がいいんじゃないかなー、みたいな気がしたりしなかっ
> たり(かなりいいかげん)。

-----------------------------------
サイトウ ヒロシ
HiroshiSaito / pob.org