我有一个带有 TWebBrowser 组件的 Delphi 6 Pro 程序,该组件加载一个嵌入了 Cool Iris Wall 的网页。 Cool Iris 墙是一个 SWF 对象,这意味着在运行时,执行发生在 Adobe Flash 播放器内部,我认为是 ActiveX 或类似对象。我遇到的问题是,有时当 Wall 从网络加载图片/视频时,它会对主 UI 线程上的 CPU 造成很大的影响。我知道 TWebBrowser 将其大部分操作移至后台线程以保持主 UI 线程的正常运行,但 Adobe Flash Player 正在做的事情发生在主 UI 线程上,这让我的程序非常痛苦。有没有办法将 Adobe Flash Player 移到后台线程?
[更新 - 12/7/2010] - 经过马拉松式的探测和调试 session 后,发现问题与 Cool Iris Wall 的 Flickr 代理有关。您可以通过两种主要方式与 Wall 交互:1) 您将特殊的 Flickr api 协议(protocol) URL 传递给它们,让它们为您与 Flickr 对话,例如“api://www.flickr.com/?search=puppy”加载墙上贴着 Flickr 关键字搜索小狗的结果。这种方法的优点是它们会为您完成向 Flickr 查询和构建 Wall 内容所需的所有工作。 2) 您自己构建一个包含照片流项目数据的 RSS 媒体提要,并将其提供给 Wall。
我使用的是技巧#1。 #1 的问题在于,当他们的服务器无法为您构建 Flickr 提要时(无论出于何种未知原因),他们的主机 SWF 会给 CPU 带来沉重的负载,从而干扰主 UI 线程的操作。我将我的整个代码库转换为直接与 Flickr API 一起工作,并使用第二种技术自己创建提要,问题就消失了。
-- 罗施勒
最佳答案
您无法控制网络浏览器如何管理其线程。如果您不希望网络浏览器干扰主线程,则不要在主线程中运行网络浏览器。
关于multithreading - 将 Delphi TWebBrowser 控件中的 Flash Player 移动到后台线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4368744/