続・nsIHttpChannel.asyncOpenが動かないの続き。
nsIHttpChannel.asyncOpen
および
nsIStreamListener
がらみのソースを追っていったところ、
どうやらNS_ProcessNextEvent
なる関数が怪しいことがわかった。
この関数は現在のスレッドに対して
nsIThread.processNextEvent(PR_False)
を呼び出す。
こうすることで現在のスレッドにたまっているGeckoイベントを処理することができるわけだ。
こいつを呼び出す処理をたとえばDelphiならApplication.OnIdle
に追加すればいい。
が、Gecko1.8まではそんなことをせずともイベントを処理できていたので改悪に見えなくもない。 せっかくのイベント駆動型のOSを使っているのに こんな余計な処理を埋め込みたくないというのが正直な感想だ。 一応Gecko1.9でもSimpleDownload他を動かせる目処が立ったので、 とりあえずそれはよしとする。
まさかnsIWebBrowser
のリスナーでも必要だとか言うことはないだろうな。
追伸。Bagelの人へ。 コメント書き込めます。 MovableTypeアップデート時に設定ミスって申し訳なかった。
コメントする