Chromeは、Flashなどの子プラグインをさまざまなプロセスからレンダリングするために子育てを使用していることを理解しています。
私はこれを実験し、SetParentWin32呼び出しを使用して動作させました。
ただし、子GUIスレッドを強制的にブロックすると、子プロセスが所有するウィンドウ領域にマウスを移動するとすぐに、親プロセスもハングします。おそらくこれは、親アプリケーションのメッセージループが子を呼び出しており、応答しないためです。Chromeはこれをどのように回避しますか?
Chromeは、Flashなどの子プラグインをさまざまなプロセスからレンダリングするために子育てを使用していることを理解しています。
私はこれを実験し、SetParentWin32呼び出しを使用して動作させました。
ただし、子GUIスレッドを強制的にブロックすると、子プロセスが所有するウィンドウ領域にマウスを移動するとすぐに、親プロセスもハングします。おそらくこれは、親アプリケーションのメッセージループが子を呼び出しており、応答しないためです。Chromeはこれをどのように回避しますか?
Flashは、親の変更のトリックを使用します。独自の.exeがあり、独自のウィンドウにレンダリングされます。それはハングを防ぐことはできません。そのウィンドウからその所有者に送信されるメッセージは、所有者がメッセージを送信していないときにブロックされます。あなたが知ったように。
ブラウザは別のトリックを使用します。これらは、タブごとに非表示のヘルパープロセスを作成し、メモリデバイスコンテキストにレンダリングします。そして、結果をデスクトップウィンドウに表示します。入力メッセージはすべて、そのプロセスに戻されます。これにより、クラッシュやそのプロセスでのハングの影響を受けなくなり、ヘルパープロセスを強制終了すると、ブラウザーが動作し続けます。自分でやるのはずっと難しい。