Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2015, 12:21   #1
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
Печаль Как заставить поток ждать пока браузер завершит свою работу

Привет!

Задача: Необходимо заставить поток ждать пока браузер завершит загрузку страницы и выполнит код в OnDocumentComplete.

Пока копал в этом направлении и раскуривал гугл, выяснил, что это можно сделать с помощью "WailForSingleObject".

Особых примеров как ее реализовать в моем случае не нашел.

Написал код:

Код:
procedure TMyThread.Execute;
 var
  i : integer;
begin
…
  for i := 0 to ArrayLinks.Length-1 do begin
    Navigate(ArrayLinks[i]);
  end;
…
end;
 
procedure TMyThread.Navigate(url);
begin
  WB.OnDocumentComplete := WBDocumentComplete;
  WB.Navigate(url);
  WaitCompliting;
end;
 
procedure TMyThread.WBDocumentComplete;
 var
  Doc : Variant;
begin
  Doc := WB.OleObject.document;
  WB.Height := Doc.body.scrollHeight;
  …
end;
 
procedure TMyThread.WaitCompliting;
 var
  Reason: DWORD;
begin
  repeat
    Reason := WailForSingleObject(WB.Handle, INFINITE);
  until Reason = WAIT_OBJECT_0;
end;
Но я его даже протестировать не могу, так как delphi подчеркивает "WailForSingleObject".
bilibian вне форума Ответить с цитированием
Старый 10.11.2015, 13:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
выяснил, что это можно сделать с помощью "WailForSingleObject".
Браузер генерирует событие. Я бы на эту функцию не надеялся.
Можно описать для WB событие загрузки документа, в котором будет устанавливаться некая переменка, которую будет ждать поток циклом типа
Код:
while not flag do sleep(100);
Где flag - Boolean свойство класса потока.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.11.2015, 14:00   #3
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Есть подозрение что и браузер тут тоже не нужен.
come-on вне форума Ответить с цитированием
Старый 10.11.2015, 15:19   #4
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Stilet, Спасибо!
bilibian вне форума Ответить с цитированием
Старый 10.11.2015, 15:33   #5
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 158
По умолчанию

Зачем создавать ещё одну тему? К тому же я ответил
http://programmersforum.ru/showthread.php?t=284580
SQLPowerUser вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заставить один метод ждать окончания другого ? Legrandes C# (си шарп) 20 18.01.2015 13:36
как заставить функцию ждать? phasha Помощь студентам 6 15.04.2012 20:57
Как притормозить основной поток пока не выполнятся все дополнительные? Crystallon Общие вопросы Delphi 2 24.11.2010 21:30
Как заставить браузер печатать с указанными BGCOLOR? Stilet HTML и CSS 3 01.10.2009 19:25
Подскажите, как в консольном приложении заставить программу ждать нажатия клавиши(си)) Александр Елис Помощь студентам 2 19.09.2009 19:38