📄 pingthrd.pas
字号:
unit PingThrd;
interface
uses
Classes,IdIcmpClient,SysUtils;
type
PingThread = class(TThread)
private
{ Private declarations }
protected
EchoIP,GetIPStr:String;
SaveIPList:TStrings;
MyIcmpClient:TIdIcmpClient;
Procedure getIP;
Procedure SaveIP;
Procedure PingIP;
Procedure UpdatePanel;
Procedure MyIdIcmpClientReply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
procedure Execute; override;
public
Constructor Create(TStrList:TStrings;TimeO:Integer);
Destructor Destroy;override;
end;
implementation
uses Hsearch;
Constructor PingThread.Create(TStrList:TStrings;TimeO:Integer);
begin
inherited Create(True);
self.FreeOnTerminate:=True;
SaveIPList:=TStrList;
MyIcmpClient:=TIdIcmpClient.Create(nil);
MyIcmpClient.Protocol:=1;
MyIcmpClient.BufferSize:=1024;
MyIcmpClient.Port:=0;
MyIcmpClient.ReceiveTimeout:=TimeO;
MyIcmpClient.OnReply:=MyIdIcmpClientReply;
end;
Procedure PingThread.MyIdIcmpClientReply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
begin
if (AReplyStatus.ReplyStatusType=rsEcho) then
begin
if(AReplyStatus.FromIpAddress=GetIPStr) then
begin
EchoIP:=AReplyStatus.FromIpAddress;
OldIP:=EchoIP;
Synchronize(SaveIP);
end;
end;
end;
Procedure PingThread.getIP;
begin //应该加入共享锁定控制或临界区控制
GetIPStr:=IntToStr(IP_A0)+'.'+IntToStr(IP_B0)
+'.'+IntToStr(IP_C0)+'.'+IntToStr(IP_D0);
UpdatePanel;
if IP_D0<IP_D then
begin
IP_D0:=IP_D0+1;
exit;
end;
if IP_D0=IP_D then
begin
if IP_C0<IP_C then
begin
IP_D0:=IP_Do; //数值复原
IP_C0:=IP_C0+1;
exit;
end;
if IP_C0=IP_C then
begin
if IP_B0<IP_B then
begin
IP_C0:=IP_Co;
IP_B0:=IP_B0+1;
exit;
end;
if IP_B0=IP_B then
begin
if IP_A0<IP_A then
begin
IP_B0:=IP_Bo;
IP_A0:=IP_A0+1;
exit;
end;
if IP_A0=IP_A then StopState:='True';
end
end;
end;
//应该加入共享锁定控制或临界区控制
end;
Procedure PingThread.SaveIP;
begin
SaveIPList.Insert(0,EchoIP);
end;
Procedure PingThread.PingIP;
begin
Synchronize(GetIP);
MyIcmpClient.Host:=GetIPStr;
MyIcmpClient.Ping;
end;
procedure PingThread.UpdatePanel;
begin
NetSearch.Edit3.Text:=IntToStr(IP_A0);
NetSearch.Edit4.Text:=IntToStr(IP_B0);
NetSearch.Edit5.Text:=IntToStr(IP_C0);
NetSearch.Edit6.Text:=IntToStr(IP_D0);
NetSearch.Panel7.Caption:='当前共产生搜索:'+IntToStr(PingCount)+'项';
NetSearch.Panel7.Update;
end;
procedure PingThread.Execute;
begin
Repeat
PingCount:=Pingcount+1;
PingIP;
until StopState='True';
Synchronize(UpdatePanel);
NetSearch.Timer1.Enabled:=False;
NetSearch.SpeedButton6.Down:=True;
self.Terminate;
end;
Destructor PingThread.Destroy;
begin
MyIcmpClient.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -