gpt4 book ai didi

delphi - 优化 TWebBrowser 的绘制以减少总 CPU 使用率

转载 作者:行者123 更新时间:2023-12-03 15:11:48 26 4
gpt4 key购买 nike

我有一个表单,其中有一个可加载 HTML 文档的 TWebBrower 组件。 HTML 文档上的数据每隔几秒更新一次,有时每秒更新多次,我使用以下方法更新 Delphi 中的值:

DOMDocument.getElementById(elementID).innerHTML := someValue;

问题是我想锁定窗口/网络浏览器以防止其绘画/更新,直到我的所有更新完成。有什么办法可以做到这一点吗?会调用

SendMessage(WebBrowser.Handle,WM_SETREDRAW,0,0);

我需要一些帮助来优化此代码,以便我的总 CPU 使用率不会持续很高。

最佳答案

由于您的主要问题是更新频率,因此您需要降低它。为此,您可以简单地存储上次更新 HTML 文档的时间,并在下一次数据更改时检查自该时间以来是否已经过了一定时间。

下面的代码演示了如何执行此操作。以下示例中的 FUpdatePeriod 是以毫秒为单位的更新周期。然后,如果您定期调用 UpdateChangesinnerHTML(此处为伪代码)将仅在自上次更改以来至少经过 1000 毫秒时更新。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MSHTML, OleCtrls, SHDocVw;

type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormCreate(Sender: TObject);
private
FLastUpdate: Cardinal;
FUpdatePeriod: Cardinal;
procedure UpdateChanges(const AData: WideString);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
FUpdatePeriod := 1000;
end;

procedure TForm1.UpdateChanges(const AData: WideString);
begin
if (GetTickCount - FLastUpdate > FUpdatePeriod) then
begin
(WebBrowser1.Document as IHTMLDocument2).body.innerHTML := AData;
FLastUpdate := GetTickCount;
end;
end;

// now remains to call the UpdateChanges periodically

end.

关于delphi - 优化 TWebBrowser 的绘制以减少总 CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10207037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com