virtual BOOL OnIdle ( largo lCount );
Valor devuelto
Distinto de cero para recibir más procesamiento de tiempo de inactividad; Si es necesario el tiempo de inactividad de no más de 0.
Parámetros
lCount
Un contador que se incrementa cada vez OnIdle se llama cuando la cola de mensajes de la aplicación está vacía. Este conteo se restablece a 0 cada vez que se procesa un mensaje nuevo. Puede utilizar el parámetro lCount para determinar la longitud relativa del tiempo que la aplicación ha estado inactiva sin procesar un mensaje.
Observaciones
Reemplazar esta función miembro para realizar el procesamiento en tiempo de inactividad. OnIdle es llamado en el bucle de mensajes por defecto cuando la cola de mensajes de la aplicación está vacía. Utilice su reemplazo para llamar a tu propio fondo inactivo-controlador de tareas.
O&nIdle debe devolver 0 para indicar que no hay tiempo de inactividad de procesamiento se requiere. El parámetro lCount se incrementa cada vez que se llama OnIdle cuando el messagenbsp; cola está vacía y restablece a 0 cada vez que se procesa un mensaje nuevo. Puede llamar a las diferentes rutinas inactivas basadas en este conteo.
A continuación resumen el procesamiento de bucle inactivo:
OnIdle para el objeto application y suministros 0 como el argumento de lCount.OnIdlerealiza el procesamiento de algunos y devuelve un valor distinto de cero para indicar que debe llamarse nuevamente hacer procesamiento adicional.OnIdle una vez más, incrementando el argumento lCount.OnIdle termina de procesar todas sus tareas inactivas y devuelve el valor 0. Esto indica el bucle de mensajes para dejar de llamar a OnIdle hasta que se reciba el siguiente mensaje de la cola de mensajes, momento en el que el ciclo de inactividad se reinicia con el argumento de establecer tonbsp; 0.No realizar tareas largas durante OnIdle porque su aplicación no puede procesar la entrada del usuario hasta OnIdle devuelve.
&Notanbsp; La implementación predeterminada de OnIdle actualiza objetos de interfaz de usuario de comandos tales como elementos de menú y botones de la barra de herramientas, y realiza limpieza de estructura de datos internos. Por lo tanto, si reemplaza OnIdle, debe llamar CWinApp::OnIdle con la lCount en su versión reemplazada. Primera llamada clase base todo procesamiento en inactividad (es decir, hasta que la clase base OnIdle devuelve el valor 0). Si necesita realizar trabajos antes de que finalice el procesamiento de la clase base, revisar la implementación de la clase base para seleccionar la adecuada lCount durante el cual hacer su trabajo.
Ejemplo
Los dos ejemplos siguientes muestran cómo utilizar OnIdle. El primer ejemplo procesa dos tareas inactivas con el argumento de lCount para priorizar las tareas. La primera tarea es prioritaria y debe hacerlo siempre que sea posible. La segunda tarea es menos importante y debe hacerse sólo cuando hay una larga pausa en la entrada del usuario. Tenga en cuenta la llamada a la versión de la clase base de OnIdle. El segundo ejemplo administra un grupo de tareas inactivas con diferentes prioridades.
BOOL CMyApp::OnIdle(LO&NG lCount)
{
nbsp; BOOL bMore = CWinApp::OnIdle(lCount);
Si (lCount == 0)
{
TRACE ("App inactivo durante un período corto de time\n");
bMore = TRUE;
}
else if (lCount == 10)
{
TRACE ("App inactivo durante la mayor cantidad de time\n");
bMore = TRUE;
}
else if (lCount == 100)
{
TRACE ("App inactivo para más cantidad de time\n");
bMore = TRUE;
}
else if (lCount == 1000)
{
TRACE ("App inactivo durante bastante tiempo de time\n");
/ / bMore no está establecido en TRUE, ya no tendrá inactivo
/ Importante: bMore no está establecido en FALSE desde mayo de CWinApp::OnIdle
/ / tienen más tareas inactivas para completar.
}
Return bMore;
/ / devolver TRUE como no hay ninguna tarea más inactivo
}
Segundo ejemplo
// 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;
}
Visión General de CWinApp |nbsp; Miembros de clase | Diagrama de jerarquía