2

FireFox 拡張用に C++ で XPCOM オブジェクトを作成しました。イベントをリッスンするためにワーカー スレッドを使用しています。イベントが発生した場合は、メイン スレッドで処理を行う必要があります。明らかに、ブラウザを使用できるようにする必要があるため、メイン スレッドで JavaScript をただ座って待つことはできません (私のイベントはめったに発生しません)。

私はスレッドでこれをやろうとしました(xpcomの男はjavascriptにイベントを送信します):

window.setTimeout( myImportantWorkFunction, 100 );

これは(意図したようにメインスレッドで)機能しますが、無期限に一時停止します。意図したように100ミリ秒後に発生しません。少しクリックするか、ウィンドウのサイズを変更する必要があり、突然関数が呼び出されます。JavaScriptが突然目覚めたように。これは、スレッドで発生しているためだと思います。

ワーカーがメインスレッドに何かを依頼するためのより良い方法はありますか?

4

3 に答える 3

0

https://developer.mozilla.org/en/nsISupports_proxiesを試しましたか?

于 2009-10-29T09:31:38.517 に答える
0

気にする人のために、私はスレッド間でメッセージを送ることをあきらめました。NSDistributedNotificationCenter を使用できるように、XPCOM オブジェクトを目的の C++ でコンパイルする方法を見つけました。これにより、javascript が満足しているメイン スレッドでイベントを取得できます。

質問はまだ有効ですが、おそらく今は誰かの回答を検証する時間はありません...

于 2009-02-18T14:24:47.590 に答える
0

JavaScript には 1 つのスレッドしかありません。関数呼び出しは、返されるまで常にブロックされます。JS からブラウザー (またはこの場合はブラウザーの拡張機能) に通信している場合は、ブラウザー側のコードがすぐに JS に戻ることを確認し、作業が完了したときに呼び出すコールバックを覚えておく必要があります (これが setTimeout の方法です)。作品)。

「クリック」は単なる偶然だと思います。イベントが発生するとすぐに警告を試みましたか?

于 2009-02-16T22:19:32.613 に答える