Форум: "Сети";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];
ВнизПинг нескольких компов одновременно Найти похожие ветки
← →
Script (2006-10-02 15:53) [0]Надо чтоб компы пропинговалиьс как можно быстрее, а до каждого компа время пинга может достигать 2 с.
Своим скудным разумом решил использовать мнгопоточность. Т.к. использовал сие впервые. Возможно ошибся где-то так что вам станет смешно :(
TPingThread = class(TThread)
private
PingNum:integer;
public
constructor Create(Num:Integer);
procedure Execute; override;
end;
Создаю по числу машин в сети
for i:=1 to CompsCount do ICMParray[i]:=TIdIcmpClient.Create(Form2);
Создаю список для потоков
ThreadList := TList.Create;
По нажатию кнопки на форме создаю потоки
for i:=1 to CompsCount do ThreadList.Add(TPingThread.Create(i));
Жду 10 сек
Sleep(10000)
И начинаю выводить результаты
for i:=1 to 200 do Memo1.Lines.Add(results[i]);
У потока методы
constructor TPingThread.Create(Num:integer);
begin
PingNum:=Num;
inherited Create(False);
end;
procedure TPingThread.Execute;
begin
FreeOnTerminate := True;
while not (Terminated or Application.Terminated) do
begin
ICMPar[PingNum].Host:=ipadr[PingNum];
ICMPar[PingNum].ReceiveTimeout:=2000;
ICMPar[PingNum].Ping;
if ICMPar[PingNum].ReplyStatus.TimeToLive > 0 then
result[PingNum]:="пингуется" //массив строк с результатами пингования
else
result[PingNum]:="не пингуется";
Terminate;
WaitFor;
end;
end;
В итоге у меня все компы всегда пингуются :-(
Причем заметил такую штуку Host и ReplyStatus.FromIpAddress отличаются постоянно. Такое ощущение что где-то что-то не успевает отработать. Вобщем помогите ламеру кто чем сможет.
← →
Ketmar © (2006-10-02 15:56) [1]а) всё неправильно %-)
б) а разве icmp из индейцев не асинхронная? (тут не уверен -- не юзаю индейцев %-)
← →
Script (2006-10-02 15:58) [2]А как правильно? По примеру из инета делал.
← →
Ketmar © (2006-10-02 16:14) [3]правильно -- сначала почитать какую-нибудь теорию. потому что как иначе я поясню, что неверно? всё. %-)
← →
Сергей М. © (2006-10-02 16:22) [4]
> Жду 10 сек
10 секунд - цифирь эта взята от балды, я так понимаю ..
← →
Script (2006-10-02 16:31) [5]Ну да. Вобще т.к. ReceiveTimeout:=2000 то больше 2-х сек не имеет смысла ждать. Но дело-то не в этом.
← →
Script (2006-10-02 16:33) [6]2 Ketmar, я тут по последним темам прошелся. Ты вобще реально чем-то помочь можешь? От тебя кроме "читай доки", "ищи в google", "ошибка в DNA" ничего нет.
← →
Сергей М. © (2006-10-02 16:36) [7]
> Вобще т.к. ReceiveTimeout:=2000 то больше 2-х сек не имеет
> смысла ждать
Ждать следует ззавершения всех запущенных тобой потоков !
← →
Script (2006-10-02 16:42) [8]Terminate;
WaitFor;
Насколько я понимаю поток прибивается сразу после того как один раз отработает.
← →
Ketmar © (2006-10-02 17:00) [9]>[6] Script 2-Oct-2006, 16:33
>кроме "читай доки", "ищи в google", "ошибка в
>DNA" ничего нет.
sapienti sat. я неоднократно упоминал, что учу думать. сиречь, использовать мозг. а пережёваной пищей пусть другие кормят.
← →
Script (2006-10-02 17:36) [10]У Вас весьма интересный метод учить думать г-н Ketmar. Если Вас так же учили с детства - сочустую.
← →
Ketmar © (2006-10-02 17:39) [11]угу. именно так. давали направление, и говорили: дальше -- сам. не жалею. более того -- благодарен. а если кого учили думать, давая готовые решения... так и рождаются "батонокидатели".
← →
Сергей М. © (2006-10-04 09:00) [12]
> Script (02.10.06 16:42) [8]
> Насколько я понимаю поток прибивается сразу после того как
> один раз отработает.
Правильно понимаешь.
А вот по поводу ожидания потоком собственного завершения (WaitFor) ты понимаешь неправильно.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2007.03.11;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.044 c