віртуальний BOOL OnIdle ( ДОВГИЙ lCount );
Значення, яке повертається
Ненульовий отримувати більш простою час; 0, якщо немає більше часу очікування необхідна.
Параметри
lCount
Лічильник збільшується кожного разу OnIdle називається, коли черга повідомлень програми порожній. Ця кількість скинути на 0, кожного разу, коли обробляється нове повідомлення. Визначення відносної тривалість програми простоює без обробки повідомлення за допомогою lCount параметр.
Зауваження
Перевизначити цей член функції для виконання обробки час простою. OnIdle називається в циклі повідомлення за промовчанням, коли черга повідомлень програми порожній. Використовуйте ваш перекрити називати ваш власний фон простоювання обробник завдань.
O&nIdle слід повернути 0, щоб вказати, що потрібна не час простою обробки. Параметр lCount піднімається кожного разу коли називається OnIdle messagenbsp; черги порожній і скидає 0 кожного разу, коли обробляється нове повідомлення. Ви можете назвати ваш різні очікування процедур на основі цього граф.
В нижче наведено короткий опис простою цикл обробки:
OnIdle для об'єкта додатка та приладдя 0 як аргумент lCount ».OnIdleвиконує деякі обробки і повертає ненульове значення вказує, що вона повинна бути названа знову зробити подальша обробка.OnIdle знову, збільшуючи аргумент lCount ».O&nIdle завершує обробку всіх недіючих завдань і повертає 0. Це говорить повідомлення петлі кинути виклик OnIdle до наступного повідомлення, отримане від черга повідомлень, після чого простою цикл перезавантажується з аргументом встановити tonbsp; 0.Не виконувати тривалі завдання під час OnIdle тому, що ваша заявка не вдалося обробити введення даних, поки OnIdle повертає.
Примітка За замовчуванням реалізація OnIdle оновлень команди користувача інтерфейс об'єктів, таких як пунктів меню і кнопки панелі інструментів, і вона виконує внутрішні дані структури очищення. Таким чином, якщо ви змінити OnIdle, ви повинні викликати CWinApp::OnIdle з lCount в змінені версії. Перший виклик простою обробки всіх базовий клас (то є, поки базового класу OnIdle повертає 0). Якщо потрібно виконати роботи до завершення обробки бази класу, огляд здійснення бази клас для вибору належного lCount під час роботи.
Приклад
Наведені два приклади ілюструють використання OnIdle. Перший приклад процесів двох недіючих завдань за допомогою lCount аргумент пріоритет завдання. Першим завданням є високий пріоритет, і ви повинні робити це, коли це можливо. Друге завдання менш важливо і повинно бути зроблено тільки тоді, коли є Довга пауза в введення даних. Примітка заклик до версії бази класу OnIdle. Другий приклад керує групою недіючих завдань з різних пріоритетів.
BOOL CMyApp::OnIdle(LO&NG lCount)
{
nbsp; BOOL bMore = CWinApp::OnIdle(lCount);
Якщо (lCount = = 0)
{
TRACE ("App простою протягом короткого періоду time\n");
bMore = TRUE;
}
Якщо інше (lCount = = 10)
{
TRACE ("App простою для більше суми time\n");
bMore = TRUE;
}
Якщо інше (lCount = = 100)
{
TRACE ("App простою для навіть більше кількості time\n");
bMore = TRUE;
}
Якщо інше (lCount = = 1000)
{
TRACE ("App простою протягом досить тривалого періоду time\n");
/ / bMore не має значення TRUE, більше не потрібно простоювання
/ / Важливо: 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; Члени класу | Ієрархічна діаграма