![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Application.ProcessMessages и загрузка процессора
Pcrepair © (2012-05-27 11:27:00)Добрый день
Замечено, что в момент загрузки страницы ПРОЦ грузит до 50% видимо в первом Application.ProcessMessages
try
Wbbr.Navigate(UrlSearch, Flags, TargetFrameName, PostData, Headers);
repeat
Application.ProcessMessages; (*видимо тут грузит проц до 50%*)
until Wbbr.ReadyState >= READYSTATE_COMPLETE;
if Wbbr.Document <> nil then
HtmlCodeData := AnsiLowerCase(
(Wbbr.Document as iHTMLDocument2).body.innerhtml);
Application.ProcessMessages; (*тут вроде бы и не надо?*)
except
CodeSite.EnterMethod( Self, 'Timer' );
CodeSite.SendError('TWebBrowser failed'); (*бравузер здох*)
CodeSite.ExitMethod( Self, 'Timer' );
end;
Вопрос: чем можно заменить Application.ProcessMessages в коде, так чтобы гарантировать загрузку страницы перед выполнением последующих инструкций
sniknik (2012-05-28 23:47:00) [21]> Как раз то самое что ты делаешь ручками с тупым циклом со слипом внутри)
вообще то не то же самое. он подменяет событийность, с оповещением на линейность с мониторингом...
ну по аналогии (грубой) вместо того чтобы заниматься своими делами и подойти к телефону когда зазвонит (событие), он поминутно снимает трубку с вопросом "барышня, меня никто не спрашивал?". а между этим пытается успеть со своими делами (ProcessMessages).
Сергей М. (2012-05-28 23:01:00) [22]
> Pcrepair
Что ж ты рогом-то уперся в OnDownloadComplete, будто это единственное событие у компонента ?
Вот же в справке черным по белому написано:
property OnDocumentComplete: TWebBrowserDocumentComplete;
Occurs when the document being navigated to reaches ReadyState_Complete.
Description
Write an OnDocumentComplete event handler to take specific action when a frame or document is fully loaded into the Web browser .For a document without frames, this event occurs once when the document finishes loading. On a document containing multiple frames, this event occurs once for each frame. When the multiple-frame document finishes loading, the Web browser fires the event one final time.
Как раз то самое что ты делаешь ручками с тупым циклом со слипом внутри)
Sha (2012-05-28 18:50:00) [23]> Pcrepair © (28.05.12 18:45) [13]
> что, с использованием события OnDownloadComplete?
и других
> а для чего в этом боте использовался Твеббраузер?
для всего; в частности, была довольно интересная задача - пробежать по всем комнатам башни (комната - страница)
> и какого размера страницу оно загружало? хотя бы 1 мб?
да пофиг абсолютно
Pcrepair (2012-05-28 18:45:00) [24]что, с использованием события OnDownloadComplete?
а для чего в этом боте использовался Твеббраузер? и какого размера страницу оно загружало? хотя бы 1 мб?
Sha (2012-05-28 18:22:00) [25]> Pcrepair © (28.05.12 18:09) [11]
Пробовал.
Ради интереса на обычном TWebBrowser написал бота для БК, если тебе это о чем-то говорит.
Без единого Application.ProcessMessages.
sniknik (2012-05-28 18:09:00) [26]> код в топике гарантирует
единственное что он делает, так - из событийной модели, и асинхронной загрузки, делает псевдо линейную модель, и псевдо синхронную загрузку. т.е. типа и код линейный, и не виснет ничего... в простонародье называется "и рыбку съесть и... не помню ;) чего там дальше". хорошим обычно не кончается.
единственный плюс - не нужно разбираться/учить как оно на самом деле работает... хотя, если подумать, это тоже минус.
> это проверено
центром сертификации памперсов? созданным специально для проверки данного...
Pcrepair (2012-05-28 18:09:00) [27]а сам то пробовал OnDownloadComplete?
и как результат?
а код в топике, во всяком случает работает стабильно и как нужно
Sha (2012-05-28 17:38:00) [28]> Pcrepair © (28.05.12 15:39) [8]
> OnDownloadComplete и прочие не походят,
а доказать можешь?
> код в топике гарантирует, в том числе и в ситуации с низкой скоростью закачки,
> правильную обработку кода(ДОМ). это проверено
код в топике - костыль, и это слишком мягко сказано
Pcrepair (2012-05-28 15:39:00) [29]нет не для меня.
OnDownloadComplete и прочие не походят, так как нет гарантии что они возникают после закачки и обработки страницы
код в топике гарантирует, в том числе и в ситуации с низкой скоростью закачки, правильную обработку кода(ДОМ). это проверено
Sha (2012-05-27 18:53:00) [30]Pcrepair © (27.05.12 18:20) [6]
События используемого компонента не для тебя, да?
Pcrepair (2012-05-27 18:20:00) [31]
Вместо:
Sleep (1); + Application.ProcessMessages;
Сделай Application.HandleMessage()
что то в интернетуме ничего вразумительного не нашел
в случае со Sleep идет повтор ожидания с заданным интервалом, пока не выполнится условие READYSTATE_COMPLETE
а что происходит при использовании Application.HandleMessage(), и для чего()? или там нужен параметр? делфи допускает не показывать() если нет параметра
Sha (2012-05-27 14:58:00) [32]> Pcrepair © (27.05.12 11:27)
просто запомни: тебе запрещено использовать Application.ProcessMessages
Rouse_ (2012-05-27 13:28:00) [33]Вместо:
Sleep (1); + Application.ProcessMessages;
Сделай Application.HandleMessage()
Anatoly Podgoretsky (2012-05-27 12:27:00) [34]А ты что решил процессор разогреть.
Pcrepair (2012-05-27 12:13:00) [35]любовались - не более 3% при загрузке страницы
впрочем уже насоветовали
repeat
Sleep (1);
Application.ProcessMessages;
надо было просто приложить АПМ к чему то
теперь не более 7% загрузки проца
Cobalt (2012-05-27 11:56:00) [36]Отчего же ты грешишь на Application.ProcessMessages, который в основном цикле программы - Application.Run - как-то не жрет процессорное время?
Лучше, открой эту страничку в IE и полюбуйся на его загрузку процессора.