Форум: "Сети";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
ВнизНесколько WebBrouserофф Найти похожие ветки
← →
guru-ru (2006-03-31 09:38) [0]Есть пробемка. Вот у меня есть процедура
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,.....)
← →
Сергей М. © (2006-03-31 10:53) [1]
> как мне вновь созданым браузерам назначить эту процедуру
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;
← →
guru-ru (2006-03-31 12:46) [2]Спасибо, а как насчет
webbrowser1.Navigate(listbox1.items.strings[x]);
x:=x+1;
можно както показать программе что эти 2 строчки разделять нельзя, нужно их выполнять в паре, не выделяя время другим процессам
← →
Сергей М. © (2006-03-31 12:59) [3]
> guru-ru (31.03.06 12:46) [2]
Такой подход изначально неверный.
Navigate() - это асинхронный метод.
Успешный его вызов не означает полное выполнение запроса, при этом указанный запрос лишь запускается на выполнение в фоне.
Объясни смысл и назначение переменной X ..
← →
guru-ru (2006-03-31 13:16) [4]Х считает какой элемент из списка нужно взять. А то что асинхронный я знаю. но думал, что может можно как в сокетах сделать блокирующий режим.
Есть предложения?
← →
Сергей М. © (2006-03-31 13:29) [5]Есть.
Полностью пересмотреть логику приложения.
И "сокеты" здесь ни при чем - транспортный уровень здесь тебе не доступен.
Возьми, например, да пропиши каждому экз-ру браузера в св-ве Tag нужное значение индекса.
← →
guru-ru (2006-03-31 14:30) [6]Таг не поможет, ведь эти гады так и будут выбирать Х в произвольном порядке. Во жопа. а нет ничего чтобы создать защищеный участок кода?
← →
Сергей М. © (2006-03-31 15:04) [7]critical sections
но использовать их в однопоточном приложении как минимум не разумно
← →
guru-ru (2006-03-31 16:31) [8]ну если сразу 10 асинхронных браузера работает это разве уже не многопоточность? конечно не в прямом смысле, но всеже...
← →
Сергей М. © (2006-03-31 16:52) [9]Еще раз - пересматривай логику.
Она у тебя расчитана скорей на синхронность, нежели на асинхронность неких вызовов.
Событие OnDocumentComplete говорит тебе об успешной загрузке документа таким-то конкретным браузером.
Я не вижу трудностей в организации некоего менеджера, который в ответ на извещение неким браузером о факте загрузки им текущего док-та даст этому браузеру очередной URL из некоего списка.
← →
guru-ru (2006-03-31 17:20) [10]буду думать. спасибо за помощь. а насчет вопроса о получении ответа (404,403,200) можно получить их из браузера? или какнить определить, доступна страница или нет.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.062 c