当插件失败时,为什么Chrome不会挂起?

时间:2012-10-06 16:39:59

标签: winapi

我了解Chrome使用重新育儿方式,以便从不同的进程中获取Flash等子插件。

我已经尝试过这个,并且我使用SetParent Win32调用它。

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

1 个答案:

答案 0 :(得分:4)

Flash使用重新教育技巧。它有自己的.exe并渲染到自己的窗口。这不会阻止挂起,当所有者不提取消息时,从该窗口发送给其所有者的任何消息都将阻止。你发现了。

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