Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];

Вниз

Здадержка   Найти похожие ветки 

 
Юрий Зотов   (2001-12-24 12:37) [14]

> panov © (22.12.01 11:31)

> А во время Application.ProcessMessages процессор
> как я понимаю занят на полную катушку...


Смотрим в исходники...

procedure TApplication.ProcessMessages;
var
Msg: TMsg;
begin
while ProcessMessage(Msg) do {loop};
end;

function TApplication.ProcessMessage(var Msg: TMsg): Boolean;
var
Handled: Boolean;
begin
Result := False;
if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
begin
Result := True;
... // Skipped (обработка выбранного из очереди сообщения)
end;
end;

Таким образом, вызов Application.ProcessMessages всего лишь приводит к обработке всех находящихся в очереди на данный момент сообщений. При этом, конечно, процессор занят (а как иначе можно их обработать?). Если же сообщений в очереди нет, то тут же происходит возврат.

Таким образом, вызов Application.ProcessMessages нагружает процессор не более, чем обычно. Что и естественно, поскольку все GUI-программы именно так и работают - постоянно крутят цикл выборки сообщений. И ничего страшного при этом не происходит.

Тут важно вот что. Нам требуется выполнить некие действия и обработать сообщения. Для этого мы делаем цикл:

while <условие> do
begin
... // Выполняем действия
Application.ProcessMessage // Обрабатываем сообщения
end;

Насколько при этом будет загружен процессор? Ответ - всегда на 100% (а как же иначе? по-другому он работать не умеет), но только В ПРЕДЕЛАХ ОДНОГО КВАНТА. По истечении же этого кванта CPU получит другой процесс. И если период измерения загрузки CPU более одного кванта (а оно, надо полагать, так и есть, иначе это не измерение а бред получится), то СРЕДНЯЯ за этот период загрузка CPU может оказаться менее 100% (конкретная цифра зависит от всех процессов в системе).

И ничего страшного в этом нет. Нам требуется сделать определенную работу. Если для ее выполнения требуется 100%-ная загрузка CPU, значит, она будет 100% - хоть выноси эту работу в отдельный поток, хоть не выноси. Если же для ее выполнения достаточно 80%-ной загрузки - значит, она будет 80%. А как же еще CPU может выполнить эту работу?



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.02.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.005 c
6-79414
Jaya1
2001-12-09 16:25
2002.02.25
---|Ветка была без названия|---


1-79316
-=GaLaN=-
2002-02-07 18:02
2002.02.25
Extended vs Integer


14-79464
Polevi
2002-01-08 18:50
2002.02.25
Мерлину


3-79273
Hermit
2002-01-30 12:40
2002.02.25
Выборка данных из сервера в локальные таблицы


14-79426
Ajax
2002-01-05 21:26
2002.02.25
Драйвера под XP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский