2

我了解 Chrome 使用 re-parenting 是为了让 Flash 等子插件从不同的进程渲染。

我已经对此进行了试验,并且使用 SetParent Win32 调用使其正常工作。

但是,当我强制子 GUI 线程阻塞时,只要鼠标移到子进程拥有的窗口区域上,父进程也会挂起。大概这是因为父应用程序中的消息循环正在向下调用子应用程序并且它从不响应。Chrome 如何解决这个问题?

4

1 回答 1

4

Flash 使用了重新育儿技巧。它有自己的 .exe 并呈现到自己的窗口。这并不能防止挂起,当所有者不发送消息时,从该窗口发送给其所有者的任何消息都会被阻止。正如你所发现的。

浏览器使用了不同的技巧。它们为每个选项卡创建一个不可见的辅助进程并呈现到内存设备上下文。并将结果传送到他们的桌面窗口。任何输入消息都会被传送回该过程。这使它们免受崩溃并在该进程中挂起,杀死该帮助进程使浏览器继续运行。做自己更难。

于 2012-10-06T18:22:56.527 回答