Текущий архив: 2004.01.13;
Скачать: CL | DM;
ВнизМне необходимо в цикле опросить по сокетам несколько машин Найти похожие ветки
← →
Sadya (2003-11-11 17:48) [0]Здравствуйте, мастера !
Смысл в том, что у меня есть список машин, которым я должен подать команду и получить от них некоторые файлы. Ситуация когда у меня одна машина, все работает как надо, но когда машин несколько, сразу встает вопрос: как остановить цикл, пока не обработается одна машинка, чтобы только после этого перейти к следующей ?
Код приблизительно такой :
for i:=0 to hosts.Count-1 do
begin
HostConnect.Host:=hosts[i];
ConnectType:="GetFileNames";
SaveFromHost:=ExtractFilePath(Application.ExeName)+"hosts\"+hosts[i]+"\fileslist.tsc";
HostConnect.Active:=True;
end;
← →
Digitman (2003-11-11 18:07) [1]какой тип у идент-ра HostConnect ?
← →
Sadya (2003-11-11 18:15) [2]Прошу прощения:
HostConnect: TClientSocket;
В смысл в том, что пока не закончился цикл не обрабатываются события OnConnect и Read
← →
Михаил (2003-11-12 10:24) [3]Я обычно делаю проще:
вставляю таймер который например читает файл со списком адресов - 1-ый пошел, читать_дальше_файл = false, далее переменная для выдачи результатов, если ошибка, то в лог, если сделала то тоже в лог, далее как выполнилась функция, то читать_дальше_файл = true, а Таймер ожидает true и шпарит дальше.
← →
Digitman (2003-11-12 10:53) [4]
> В смысл в том, что пока не закончился цикл не обрабатываются
> события OnConnect и Read
и что ?
← →
Sadya (2003-11-12 13:08) [5]Т.е. с циклом мне никак не справится, функции типа WaitForDisconect нету и задача решаема только через таймер
← →
Digitman (2003-11-12 13:48) [6]
> Т.е. с циклом мне никак не справится, функции типа WaitForDisconect
> нету и задача решаема только через таймер
глупости.
берешь один-единственный компонент TClientSocket,
задаешь ему параметры очередного сервера и просто выполняешь Open(), засим успокаиваешься и занимаешься прочими делами (1)
возникает событие OnConnect() - производишь нужный инф.обмен с сервером
возникает событие OnDisconnect() или OnError() - шлешь самому себе некое сообщение А (PostMessage) и успокаиваешься
получаешь сообщение А, и если в списке есть еще серверы, с которыми нужно произвести инф.обмен, здесь же, в его обработчике сообщения А выполняешь (1), иначе - конец, выход
← →
Sadya (2003-11-12 13:57) [7]Спасибо за совет, попробую. О результатах напишу
← →
Sadya (2003-11-12 17:51) [8]Господа, массив формирую, один раз все пересылается, а потом опять тишина, повторное подключение пытаюсь организовать прямо в Disconnect:
procedure TMainForm.HostConnectDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
SetLength(Connections,Length(Connections)-1);
if Length(Connections)>0 then
begin
HostConnect.Host:=Connections[Length(Connections)-1][0];
HostConnect.Open;
end;
end;
*********************
Connections - это массив, где хранится список подключений
Интересно, что я делаю не так ?
← →
Digitman (2003-11-12 18:21) [9]
> Интересно, что я делаю не так ?
делаешь ты "не так" вот что :
> повторное подключение пытаюсь организовать прямо в Disconnect
хотя я русским языком тебе сказал (цитирую) :
> возникает событие OnDisconnect() или OnError() - шлешь самому
> себе некое сообщение А (PostMessage) и успокаиваешься
← →
Sadya (2003-11-12 18:41) [10]Точно, я был невнимательным, теперь вроде все пучком
Страницы: 1 вся ветка
Текущий архив: 2004.01.13;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.011 c