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

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

Application.ProcessMessages и загрузка процессора


Страницы:   1 2

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 и полюбуйся на его загрузку процессора.


Страницы:   1 2

Наверх

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