循环中有延时,导致在循化执行中不能关闭,如何可以关闭?

lostmoon 2010-02-09 07:02:33

循环中有延时,导致在循化执行中不能关闭,如何可以关闭?



程序循化取出数据库的URL,然后在webbrowser打开,每次打开间隔10s。




procedure Delay(dwMilliseconds: Longint);
var
iStart, iStop: DWORD;
begin
iStart := GetTickCount;
repeat
iStop := GetTickCount;
Application.ProcessMessages;
until (iStop - iStart) >= dwMilliseconds;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin

Form1.ADOQuery1.Close;
Form1.ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('select * from keywords');
Form1.ADOQuery1.Active:=True;
Form1.ADOQuery1.ExecSQL;
ADOQuery1.first;

b:=true;
while(b) do
begin
while not adoquery1.eof do
begin
if not b then break;



WebBrowser1.Navigate(ADOQuery1.FieldByName('KeyURL').value);
Delay(10000);
repeat
Application.ProcessMessages;
until (not webbrowser1.Busy);

adoquery1.next;

end;
end;
end;



procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
b:=false;
end;













...全文
101 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lostmoon 2010-02-10
  • 打赏
  • 举报
回复
不 想 用 timer
forestry98 2010-02-10
  • 打赏
  • 举报
回复
看楼主的回复就知道是超级新手。

TTimer 用消息驱动,不比你用 repeat ...... until 循环好吗?
你不用任务管理器看看 Delay 函数延时的时候,你的程序占用的 CPU 有多高!
lostmoon 2010-02-10
  • 打赏
  • 举报
回复
这种情况不好,外层还有一个循环,也会定时器? 那么定时多少呢,
forestry98 2010-02-09
  • 打赏
  • 举报
回复
真大意,要要修改一个地方


procedure TForm1.Timer1Timer(Sender: TObject);
begin
if FIndex < FList.Count then begin
WebBrowser1.Navigate(FList.Strings[FIndex]);
Inc(FIndex);
end else
Timer1.Enabled := False;
end;

forestry98 2010-02-09
  • 打赏
  • 举报
回复
修改了一下

procedure TForm1.Button1Click(Sender: TObject);
begin
FList.Clear;
FIndex := 0;
with ADOQuery1 do begin
SQL.Text := 'select * from keywords';
Open;
while not Eof do begin
FList.Add(FieldByName('KeyURL').value);
Next;
end;
Close;
end;
Timer1.Enabled := True;
end;
forestry98 2010-02-09
  • 打赏
  • 举报
回复
我建议楼主用 TTimer 定时


type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
ADOQuery1: TADOQuery;
WebBrowser1: TWebBrowser;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
FList: TStrings;
FIndex: Integer;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
FList := TStringList.Create;
Timer1.Enabled := False;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FList.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
FList.Clear;
FIndex := 0;
with ADOQuery1 do begin
SQL.Text := 'select * from keywords';
ExecSQL;
while not Eof do begin
FList.Add(FieldByName('KeyURL').value);
Next;
end;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if FIndex < FList.Count then begin
WebBrowser1.Navigate(FList.Strings(FIndex);
Inc(FIndex);
end else
Timer1.Enabled := False;
end;

end.
内容概要:本文介绍了DeepSeek在职场的应用,从提示语技巧到多场景应用,涵盖了DeepSeek的基础模型(V3)、深度思考模型(R1)及其联网搜索功能。文详细描述了DeepSeek的模型对比,包括操作规范、结果导向、路径灵活性、响应模式和风险特征等方面。此外,还探讨了DeepSeek在制作可视化图表、PPT、海报、视频以及批量生成新媒体文案等具体应用场景的使用方法和技巧。最后,文章展示了DeepSeek在市场调查、AI应用开发等方面的应用实例,强调了其在人机协同和共生领域的潜力。 适用人群:适用于希望提升工作效率和创新能力的职场人士,特别是从事数据分析、内容创作、市场营销、AI开发等领域的专业人士。 使用场景及目标:①通过DeepSeek的基础模型(V3)和深度思考模型(R1)进行高效的任务处理和复杂推理;②利用DeepSeek制作可视化图表、PPT、海报和视频,提高内容创作的质量和效率;③通过DeepSeek进行市场调查和AI应用开发,优化业务流程并推动创新。 其他说明:DeepSeek不仅提供了强大的AI工具,还强调了人机协同的重要性。用户在使用过程应注意操作规范,结合实际需求选择合适的模型,并充分利用DeepSeek的各项功能来实现高效的职场应用。文还提到了多个国际竞赛的获奖情况,展示了DeepSeek团队在AI领域的卓越实力。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧