Вроде получилось, за одним исключением - как понять, когда трассировка завершена? Т.е. я сделал некую процедуру, которую буду вызывать из основной программы: ей на вход подаются адрес хоста, число хопов и переменная, куда должен попасть результат трассировки.
Код:
procedure tracerout(const adr:string;hop:integer; var otvet:string);
begin
otvet:='';
with TTraceThread.Create(False) do
begin
FreeOnTerminate := True;
DestinationAddress := adr;
IterationCount := hop;
Resume;
end;
{res - переменная, в которую Log заталкивает ответ}
{??? otvet:=res; ???}
end;
А конце, по идее, в "ответ" должен передаваться результат трассировки, который в этом самом res'e. Но - к тому моменту, как начинает выполняться присваивание, не всегда успевают пройти даже 2 трассировки, а если хопов 30? Как "задержать" программу (Не подвешивая ее, нужно, чтобы пользователь мог что-то делать, пока идет трассировка)? Пробовал "while pos('завершена',res)=0 do begin end", но этот цикл не дает потоку выполняться => бесконечный цикл...