Показать сообщение отдельно
  #5  
Старый 19.09.2010, 19:13
lega4 lega4 вне форума
Прохожий
 
Регистрация: 14.09.2010
Сообщения: 15
Репутация: 10
По умолчанию

Вроде получилось, за одним исключением - как понять, когда трассировка завершена? Т.е. я сделал некую процедуру, которую буду вызывать из основной программы: ей на вход подаются адрес хоста, число хопов и переменная, куда должен попасть результат трассировки.
Код:
 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", но этот цикл не дает потоку выполняться => бесконечный цикл...
Ответить с цитированием