📄 monitorthrd.pas
字号:
unit MonitorThrd;
interface
uses
Classes,IdIcmpClient,SysUtils;
type
MonitorIP = class(TThread)
private
{ Private declarations }
protected
GetIPStr:String;
SaveIPList:TStrings;
MyIcmpClient:TIdIcmpClient;
Procedure SaveIP;
Procedure PingIP;
Procedure UpdatePanel;
Procedure MyIdIcmpClientReply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
procedure Execute; override;
public
Constructor Create(PngIP:String;EchoIPList:TStrings;TimeO:Integer);
Destructor Destroy;override;
end;
implementation
uses Hsearch;
Constructor MonitorIP.Create(PngIP:String;EchoIPList:TStrings;TimeO:Integer);
begin
inherited Create(True);
self.FreeOnTerminate:=True;
GetIPStr:=PngIP;
SaveIPList:=EchoIPList;
MyIcmpClient:=TIdIcmpClient.Create(nil);
MyIcmpClient.Protocol:=1;
MyIcmpClient.BufferSize:=8192;
MyIcmpClient.Port:=0;
MyIcmpClient.ReceiveTimeout:=TimeO;
MyIcmpClient.OnReply:=MyIdIcmpClientReply;
end;
Procedure MonitorIP.MyIdIcmpClientReply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
begin
if (AReplyStatus.ReplyStatusType=rsEcho) then
begin
if(AReplyStatus.FromIpAddress=GetIPStr) then
begin
Synchronize(SaveIP);
end;
end;
end;
Procedure MonitorIP.SaveIP;
begin
SaveIPList[1]:='在线';
SaveIPList[5]:=IntToStr(StrToInt(SaveIPList[5])+1);
SaveIPList[4]:=IntToStr(Trunc(100*(StrToInt(SaveIPList[5])/StrToInt(SaveIPList[6]))))+'%';
end;
Procedure MonitorIP.PingIP;
begin
MyIcmpClient.Host:=GetIPStr;
MyIcmpClient.Ping;
end;
procedure MonitorIP.UpdatePanel;
begin
NetSearch.Panel1.Caption:='当前探测:'+GetIPStr+
'共完成:'+IntToStr(PingCount)+'个IP地址';
NetSearch.Panel1.Update;
end;
procedure MonitorIP.Execute;
begin
PingCount:=Pingcount+1;
PingIP;
Synchronize(UpdatePanel);
NetSearch.Timer1.Enabled:=False;
self.Terminate;
end;
Destructor MonitorIP.Destroy;
begin
MyIcmpClient.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -