关于程序等待的问题(在线等待) ( 积分: 50 )

  • 主题发起人 主题发起人 qingtz
  • 开始时间 开始时间
Q

qingtz

Unregistered / Unconfirmed
GUEST, unregistred user!
我用idhttp编程时,现在有一组超链接保存在stringlist里面,url1,url2.....
我需要逐一处理这些链接,想用循环实现:
1。先str:=idhttp.get(url1);
2。在str中提取我需要的链接a
3。等待60秒后再用idhttp.get(a) //一次循环结束
下面继续回到第一步idhttp.get(url2);....直到全部处理完

就是在等待60秒的地方我没法解决了,要是用sleep(60*1000)则程序在等待的时候就像死掉了,没响应了;用timer组件倒是不死,就是我没办法实现循环了,处理完url1就结束了。

那位大虾帮我一把,给个设计思路也行,不胜感激!
 
我用idhttp编程时,现在有一组超链接保存在stringlist里面,url1,url2.....
我需要逐一处理这些链接,想用循环实现:
1。先str:=idhttp.get(url1);
2。在str中提取我需要的链接a
3。等待60秒后再用idhttp.get(a) //一次循环结束
下面继续回到第一步idhttp.get(url2);....直到全部处理完

就是在等待60秒的地方我没法解决了,要是用sleep(60*1000)则程序在等待的时候就像死掉了,没响应了;用timer组件倒是不死,就是我没办法实现循环了,处理完url1就结束了。

那位大虾帮我一把,给个设计思路也行,不胜感激!
 
timer组件没办法实现循环吗?

丢掉你的for就可以了
 
procedure delay(milliseconds:dword);
var tmp:dword;
begin
tmp:=gettickcount;
repeat
application.processmessages;
until (gettickcount-tmp)>=milliseconds;
end;
 
问题自己解决了,用递规调用实现了
换个问题,线程中能创建timer组件吗?
 
多人接受答案了。
 
做个全局变量然后用timer

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
IdHTTP1: TIdHTTP;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
i:integer;
urllist:Tstringlist;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
urllist:=Tstringlist.Create;
i:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
idhttp1.Get(urllist.Strings);
inc(i);
if i=urllist.Count then
i=0;
end;

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

end.
 
用Timer循环

在Timer的触发事件 是不是onInterval...忘了...在里面写
Timer1.Enable:=False;
If i<循环次数 then Begin

处理过程

Timer1.Enable:=True;
End;

就行了 i定义成全局变量
 
后退
顶部