|

楼主 |
发表于 2008-3-11 15:53:15
|
显示全部楼层
:eek:
已经引入了 不过速度没预期的快
能帮我看下下面的程序吗?我是想对数据集中的URL逐个采取PING 操作 ,然后把是否PING通等信息存回表里,如果不用多线程,当PING 不通时,会等待一段时间,这样影响效率.
我的代码运行时有时还会报错.说数据集不处于编辑状态.是哪写的不对吗?
unit ZDXJ1;
interface
uses
Business.System, Business.Model, Business.Forms,borland.Delphi.WinInet,
Business.Forms, business.System.StringUtils, Business.Data;
var
ss:string;
type
TMyThread=class(TThread)
private
FForm: TZDXJ1;
context:TContext;
public
property Form: TZDXJ1 read FForm write FForm;
procedure Execute;override;
end;
type
TZDXJ1 = class(TFormDoc)
InfoBroker: TInfoBroker;
DataSetBroker1: TDataSetBroker;
Timer1: TTimer;
ImageList1: TImageList;
datagrid1Column1: TDataGridColumn;
datagrid1URL: TDataGridColumn;
datagrid1Column3: TDataGridColumn;
datagrid1Column4: TDataGridColumn;
datagrid1Column5: TDataGridColumn;
datagrid1Column6: TDataGridImageColumn;
Button1: TButton;
Button2: TButton;
datagrid1: TDataGrid;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormDocCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
lDataSet:TDataSet;
{private declarations}
public
procedure GetData;
function GetInfo(Number:integer):string;//取错误信息
function Islive(Number:integer):String;//判断是否存活
{public declarations}
end;
implementation
procedure TMyThread.Execute;
var
Number:integer;
Url,Flag:String;
//i: Integer;
// l: Integer;
begin
FForm:= TZDXJ1.Create(self.context);
FForm.GetData;
FForm.lDataset.First;
while not FForm.lDataset.Eof do
begin
FForm.lDataset.Edit;
Url:=FForm.lDataset.FieldByName('应用URL').AsString;
Number:=ThirdPkg.unit2.CheckedUrl(Url,50000);//DLL引用到平台的函数PING地址
FForm.lDataset.FieldByName('是否存活').AsString:=FForm.Islive(Number);
FForm.lDataset.FieldByName('返回信息').AsString:=FForm.GetInfo(Number);
FForm.lDataset.Next;
end;
end;
procedure TZDXJ1.Timer1Timer(Sender: TObject);
var
//Number:integer;
//Url,Flag:String;
T:TMyThread;
begin
T:=TMyThread.Create(True);
T.context:=self.Context;
T.Form:=self;
T.Resume;
end; |
|