![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пинг нескольких компов одновременно [D7, WinXP]
Script © (2006-10-02 15:53:00)Надо чтоб компы пропинговалиьс как можно быстрее, а до каждого компа время пинга может достигать 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 отличаются постоянно. Такое ощущение что где-то что-то не успевает отработать. Вобщем помогите ламеру кто чем сможет.
Сергей М. (2006-10-04 09:00:00) [1]
> Script (02.10.06 16:42) [8]
> Насколько я понимаю поток прибивается сразу после того как
> один раз отработает.
Правильно понимаешь.
А вот по поводу ожидания потоком собственногозавершения (WaitFor) ты понимаешь неправильно.
Ketmar (2006-10-02 17:39:00) [2]угу. именно так. давали направление, и говорили: дальше -- сам. не жалею. более того -- благодарен. а если кого учили думать, давая готовые решения... так и рождаются "батонокидатели".
Script (2006-10-02 17:36:00) [3]У Вас весьма интересный метод учить думать г-н Ketmar. Если Вас так же учили с детства - сочустую.
Ketmar (2006-10-02 17:00:00) [4]>[6] Script 2-Oct-2006, 16:33
>кроме "читай доки", "ищи в google", "ошибка в
>DNA" ничего нет.
sapienti sat. я неоднократно упоминал, что учу думать. сиречь, использовать мозг. а пережёваной пищей пусть другие кормят.
Script (2006-10-02 16:42:00) [5]Terminate;
WaitFor;
Насколько я понимаю поток прибивается сразу после того как один раз отработает.
Сергей М. (2006-10-02 16:36:00) [6]
> Вобще т.к. ReceiveTimeout:=2000 то больше 2-х сек не имеет
> смысла ждать
Ждать следует ззавершения всех запущенных тобой потоков !
Script (2006-10-02 16:33:00) [7]2 Ketmar, я тут по последним темам прошелся. Ты вобще реально чем-то помочь можешь? От тебя кроме "читай доки", "ищи в google", "ошибка в DNA" ничего нет.
Script (2006-10-02 16:31:00) [8]Ну да. Вобще т.к. ReceiveTimeout:=2000 то больше 2-х сек не имеет смысла ждать. Но дело-то не в этом.
Сергей М. (2006-10-02 16:22:00) [9]
> Жду 10 сек
10 секунд - цифирь эта взята от балды, я так понимаю ..
Ketmar (2006-10-02 16:14:00) [10]правильно -- сначала почитать какую-нибудь теорию. потому что как иначе я поясню, что неверно? всё. %-)
Script (2006-10-02 15:58:00) [11]А как правильно? По примеру из инета делал.
Ketmar (2006-10-02 15:56:00) [12]а) всё неправильно %-)
б) а разве icmp из индейцев не асинхронная? (тут не уверен -- не юзаю индейцев %-)