Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Несколько WebBrouserофф


guru-ru ©   (2006-03-31 09:38:00) 

Есть пробемка. Вот у меня есть процедура

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
 const pDisp: IDispatch; var URL: OleVariant);
begin
//IsFirst Логическая
if IsFirst then
  begin
     webbrowser1.Navigate(listbox1.items.strings[x]);
     x:=x+1;
     // эти 2 строчки проблемные, т.к. после вызова первой другой браузер может
     //также выполнить ее и в итоге разные браузеры загрузят одну и туже
     //строку и потом только пойдет увеличение х:=х+1
     isfirst:=false;
  end
  Else
  begin
     memo1.lines.add(' А вот сюды мне нужно передать страницу, которую именно этот браузер грузил!!!');
     IsFirst:=true;
  end;

end;

затем у меня динамически создается 10 экземпляров браузеров и вот первый вопрос
как мне вновь созданым браузерам назначить эту процедуру
2)После назанчиения появятся проблемы обозначенные в коментариях
3)Можно как-то с помощью браузера получить код-ответ (400 NotFound, 200 Ok,.....)


guru-ru   (2006-03-31 17:20:00) [1]

буду думать. спасибо за помощь. а насчет вопроса о получении ответа (404,403,200) можно получить их из браузера? или какнить определить, доступна страница или нет.


Сергей М.   (2006-03-31 16:52:00) [2]

Еще раз - пересматривай логику.

Она у тебя расчитана скорей на синхронность, нежели на асинхронность неких вызовов.

Событие OnDocumentComplete говорит тебе об успешной загрузке документа таким-то конкретнымбраузером.

Я не вижу трудностей в организации некоего менеджера, который в ответ на извещение неким браузером о факте загрузки им текущего док-та даст этому браузеру очередной URL из некоего списка.


guru-ru   (2006-03-31 16:31:00) [3]

ну если сразу 10 асинхронных браузера работает это разве уже не многопоточность? конечно не в прямом смысле, но всеже...


Сергей М.   (2006-03-31 15:04:00) [4]

critical sections

но использовать их в однопоточном приложении как минимум не разумно


guru-ru   (2006-03-31 14:30:00) [5]

Таг не поможет, ведь эти гады так и будут выбирать Х в произвольном порядке. Во жопа. а нет ничего чтобы создать защищеный участок кода?


Сергей М.   (2006-03-31 13:29:00) [6]

Есть.

Полностью пересмотреть логику приложения.

И "сокеты" здесь ни при чем - транспортный уровень здесь тебе не доступен.

Возьми, например, да пропиши каждому экз-ру браузера в св-ве Tag нужное значение индекса.


guru-ru   (2006-03-31 13:16:00) [7]

Х считает какой элемент из списка нужно взять. А то что асинхронный я знаю. но думал, что может можно как в сокетах сделать блокирующий режим.
Есть предложения?


Сергей М.   (2006-03-31 12:59:00) [8]


> guru-ru   (31.03.06 12:46) [2]


Такой подход изначально неверный.

Navigate() - это асинхронныйметод.
Успешный его вызов не означает полное выполнение запроса, при этом указанный запрос лишь запускается на выполнение в фоне.

Объясни смысл и назначение переменной X ..


guru-ru   (2006-03-31 12:46:00) [9]

Спасибо, а как насчет
    webbrowser1.Navigate(listbox1.items.strings[x]);
    x:=x+1;

можно както показать программе что эти 2 строчки разделять нельзя, нужно их выполнять в паре, не выделяя время другим процессам


Сергей М.   (2006-03-31 10:53:00) [10]


> как мне вновь созданым браузерам назначить эту процедуру


procedure TForm1.WebBrowserDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var Browser: TWebBrowser;
begin
 Browser := Sender as TWebBrowser;
.. работаем с Browser ..
end;

...

for i:= 0 to 9 do
begin
 Browsers[i] := TWebBrowser.Create(...);
 Browsers[i].OnComplete := WebBrowserDocumentComplete;  
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо