Есть список IP-адресов. Нужно пробежаться по этому списку, найти рабочий хост и остановить цикл после передав рабочий IP-адрес для дальнейших манипуляций.
Сделал набросок и не работает, постоянно возвращается
False даже при одном рабочем хосте.
procedure TGetHost_Thread.Execute;
var
CL: TClientSocket;
I, TimeOut: Integer;
begin
try
try
CL := TClientSocket.Create(nil);
CL.ClientType := ctNonBlocking;
for I := 0 to Form1.Memo1.Lines.Count - 1 do
begin
B := False;
CL.Host := Form1.Memo1.Lines.Strings[I];
CL.Port := 5191;
CL.Open;
// Имитация блокирующего режима
for TimeOut := 1 to 20 do // 20 по 100 ms = 2 секунды
begin
if (CL.Active <> True) then
begin
Sleep(100);
end;
end;
if CL.Active then
begin
B := True;
Break;
end;
CL.Close;
end;
except
end;
finally
FreeAndNil(CL);
end;
Synchronize(SyncProc);
Terminate;
end;
procedure TGetHost_Thread.SyncProc;
begin
if B then ShowMessage('Есть рабочий хост');
end;