Zitat:
Ich habe die Lösung gefunden ! Dank dem Timeout von 500 ms ist das jedes mal abgestürzt... Wenn ich da ein Delay von >500 ms einbaue funktioniert es !
Ich habe nämlich grad das gleiche Problem, aber es geht trotzdem nicht ...
Bei folgendem Sourcecode bleibt der Scanner einfach irgendwo stehen (so bei 15 oder so ...) und macht nicht weiter ...
Delphi-Quellcode:
TScanner = class (TThread)
public
ShowStatus: Boolean;
procedure Execute; override;
private
PortOpen: Boolean;
ScanHost: Byte;
procedure VCL_State;
procedure VCL_Add;
end;
var
Form1: TForm1;
Host: Byte = 0;
implementation
{$R *.dfm}
procedure TScanner.Execute;
var
TCPClient: TIdTCPClient;
begin
TCPClient := TIdTCPClient.Create(nil);
while (Host < 254) AND (not Terminated) do
begin
inc (Host);
ScanHost := Host;
if ShowStatus then synchronize (VCL_State);
TCPClient.Host := '192.168.0.' + IntToStr (ScanHost);
TCPClient.Port := 80;
try
TCPClient.Connect(1000);
PortOpen := TRUE;
except
PortOpen := FALSE;
end;
if TCPClient.Connected then TCPClient.Disconnect;
synchronize (VCL_Add);
end;
end;
procedure TScanner.VCL_State;
begin
Form1.ProgressBar1.StepIt;
Form1.Label2.Caption := IntToStr(ScanHost);
end;
procedure TScanner.VCL_Add;
begin
if PortOpen then Form1.ListBox1.Items.Add('192.168.0.' + inttostr (ScanHost))
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
with TScanner.Create(TRUE) do
begin
FreeOnTerminate := TRUE;
ShowStatus := TRUE;
Resume;
end;
end;