Виртуальный BOOL OnIdle ( ДЛИННЫЕ lCount );
Возвращаемое значение
Ненулевое значение, чтобы получить больше обработку времени простоя; 0, если требуется не больше время простоя.
Параметры
lCount
Счетчик увеличивается каждый раз, когда OnIdle вызывается, когда очередь сообщений приложения является пустым. Этот счетчик сбрасывается в 0 каждый раз, когда новое сообщение обрабатывается. Параметр lCount используется для определения относительной длины времени, когда приложение не используется без обработки сообщения.
Примечания
Переопределите эта функция-член, чтобы выполнить обработку времени простоя. OnIdle вызывается в цикл сообщений по умолчанию, когда очередь сообщений приложения является пустым. Использовать переопределение для вызова свой собственный фон простоя обработчика задач.
O&nIdle должен возвращать 0, чтобы указать, что отсутствие времени простоя обработки не требуется. LCount параметр увеличивается каждый раз, когда OnIdle вызывается при messagenbsp; очередь пуста и сбрасывается в 0 каждый раз, когда новое сообщение обрабатывается. Вы можете вызвать ваш различных простоя подпрограмм, основанных на этот граф.
Ниже приводится резюме простоя цикла обработки:
OnIdle для объекта application и принадлежности 0 в качестве аргумента lCount.OnIdleвыполняет определенную обработку и возвращает ненулевое значение для обозначения она должна вызываться снова для дальнейшей обработки.OnIdle снова, увеличивая значение аргумента lCount.O&nIdle заканчивает обработку всех своих простаивающих задач и возвращает 0. Это говорит цикла обработки сообщений для остановки вызова OnIdle пока не будет получено следующее сообщение из очереди сообщений, на котором простоя цикл перезагрузки с аргументом tonbsp; 0 при.Не выполнять длительные задачи во время события OnIdle потому, что ваше приложение не может обработать ввод пользователя до тех пор, пока OnIdle возвращается.
Примечание Реализация по умолчанию OnIdle обновляет объекты команд интерфейса пользователя такие, как пункты меню и кнопки панели инструментов, и он выполняет очистку структуры внутренних данных. Таким образом при переопределении OnIdle, необходимо вызвать CWinApp::OnIdle с lCount в переопределенной версии. Сначала вызвать фоновой обработки всех базового класса (то есть, пока базового класса OnIdle возвращается значение 0). Если вам нужно выполнить работу, прежде чем завершения обработки базового класса, обзор осуществления базового класса для выбора надлежащего lCount , в течение которого для работы.
Пример
Следующие два примера показывают, как пользоваться данным типом расписания. Первый пример обрабатывает две простаивающих задач с помощью аргумента lCount для определения приоритетности задач. Первая задача — высокий приоритет, и вы должны делать это по мере возможности. Вторая задача имеет менее важное значение и должно осуществляться только тогда, когда существует долгая пауза в данных, введенных пользователем. Обратите внимание на вызов базового класса версии OnIdle. Во втором примере управляет группой задач периода бездействия системы с различными приоритетами.
BOOL CMyApp::OnIdle(LO&NG lCount)
{
nbsp; BOOL bMore = CWinApp::OnIdle(lCount);
Если (lCount == 0)
{
СЛЕД ("App простоя за короткий период time\n");
bMore = TRUE;
}
иначе если (lCount == 10)
{
СЛЕД ("App простоя для больше количество time\n");
bMore = TRUE;
}
иначе если (lCount == 100)
{
СЛЕД ("App простоя для даже больше количество time\n");
bMore = TRUE;
}
иначе если (lCount == 1000)
{
СЛЕД ("App простоя на довольно длительный период time\n");
/ / bMore не задано значение true, больше не нужно idle
/ / ВАЖНЫЕ: bMore не задано значение FALSE, так как могут CWinApp::OnIdle
/ / имеют больше простаивающих задач для завершения.
}
возвращение bMore;
/ / значение TRUE возвращается, пока есть какие-либо более простой задачи
}
Второй пример
// In this example, four idle loop tasks are given various
// opportunities to run:
// Task1 is always given a chance to run during idle time, provided
// that no message has queued up while the framework was processing
// its own idle loop tasks (at lCount levels 0 and 1).
// Task2 is given a chance to run only if Task1 has already run,
// provided that no message has queued up while Task1 was running.
// Task3 and Task4 are given a chance to run only if both Task1 and
// Task2 have already run, and no message has queued up in the mean
// time. If Task3 gets its chance to run, then Task4 always gets
// a chance to run immediately after Task3.
BOOL CMyApp::OnIdle(LONG lCount)
{
// In this example, as in most applications, you should let the
// base class CWinApp::OnIdle complete its processing before you
// attempt any additional idle loop processing.
if (CWinApp::OnIdle(lCount))
return TRUE;
// The base class CWinApp::OnIdle reserves the lCount values 0
// and 1 for the framework's own idle processing. If you wish to
// share idle processing time at a peer level with the framework,
// then replace the above if-statement with a straight call to
// CWinApp::OnIdle; and then add a case statement for lCount value
// 0 and/or 1. Study the base class implementation first to
// understand how your idle loop tasks will compete with the
// framework's idle loop processing.
switch (lCount)
{
case 2:
Task1();
return TRUE; // next time give Task2 a chance
case 3:
Task2();
return TRUE; // next time give Task3 and Task4 a chance
case 4:
Task3();
Task4();
return FALSE; // cycle through the idle loop tasks again
}
return FALSE;
}
Обзор CWinApp |nbsp; Члены класса | Иерархическая схема