OSXでSafari 5.1のプラグインスレッドをコールバックする方法は?

Geckoの関数NPN_PluginThreadAsyncCall/pluginthreadasynccallがSafari 5.1で動作しません(Firefoxが動作します)。私の関数は呼び出されません。別のスレッドで長時間実行されたタスクを実行した後、JavaScriptに関数呼び出しを戻そうとしています。どうすればこの作品を作れますか?

0

1 答え

ええ、Safari 5.1と同じ問題が FireBreath にありました。これはあなたがよく知っていない場合は間違いなく見てくださいそれと); NPN_PluginThreadAsyncCallは動作しなくなりました。どのプラットフォームを使用しているのかを指定していないので、MacとWindowsの両方で使用していることを示します。

ウィンドウでは、HWNDというメッセージを作成し、そのHWNDにイベントデータにvoid *を渡すメッセージをLPARAMとして送信します。 void *は、通常はプラグインスレッドが呼び出すparamsを保持するデータ構造体へのポインタに変換され、呼び出しが行われ、データ構造体は解放されます。使用するメッセージウィンドウクラスはこちらこちらの場所に電話があります。 (IEでのクロススレッド呼び出しには同じメカニズムを使用しています)

Macでは、基本的にはobjective-c performSelectorOnMainThreadを使用します。私たちはそれをC ++から使いやすくするためのクラスにまとめました。 使用するスケジューラクラスはこちらここに呼び出しが行われます。あなたは本当に注意する必要があることに注意してください。なぜならこれらは可能な競争条件がたくさんあり、時にはリエントラントコードで終わることがあるからです。 FireBreathには、クロススレッドコールを完成させるために数十時間の作業が必要です。それは信じられないほどトリッキーな問題です。

うまくいけば、これは役立ちます!

1
追加された
あなたの助けをもう一度ありがとう。私はperformSelectorOnMainThreadを使用して終了しました。これはうまく動作するようです:)
追加された 著者 Peter Tseng,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript