multithreading - 将 Delphi TWebBrowser 控件中的 Flash Player 移动到后台线程?

标签 multithreading flash delphi adobe twebbrowser

我有一个带有 TWebBrowser 组件的 Delphi 6 Pro 程序,该组件加载一个嵌入了 Cool Iris Wall 的网页。 Cool Iris 墙是一个 SWF 对象,这意味着在运行时,执行发生在 Adob​​e Flash 播放器内部,我认为是 ActiveX 或类似对象。我遇到的问题是,有时当 Wall 从网络加载图片/视频时,它会对主 UI 线程上的 CPU 造成很大的影响。我知道 TWebBrowser 将其大部分操作移至后台线程以保持主 UI 线程的正常运行,但 Adob​​e Flash Player 正在做的事情发生在主 UI 线程上,这让我的程序非常痛苦。有没有办法将 Adob​​e 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/

相关文章:

Python ping本地IP

delphi - 当我在 Delphi 中使用 SOAP 通过 SOAP 将数据远程读取到客户端数据集时,从 TXMLTransform 发送的 XML 解析错误意味着什么?

c - pthread_create 失败并返回 -1(或 4294967295)

iphone - Objective-C 相当于 Java 的 BlockingQueue?

apache-flex - 用于数据可视化的 Flash vs. Flex vs. Actionscript

javascript - IE 中的 jQuery UI 对话框和 Flash

flash - 声音使用ActionScript 3淡入/淡出

delphi - "Packed Now Forces Byte Alignment of Records"是什么意思?

javascript - Delphi - 无法在多线程应用程序中使用 IWebBrowser2 抑制 JavaScript 错误对话框

iphone - NSURLConnection 与委托(delegate) vs initWithContentsOfURL : with Grand Central Dispatch