Tecnología

Inicio

Cómo hacer una aplicación de alarma MFC

Si quieres una aplicación de alarma para que pueda recordar para realizar una tarea en particular en un momento determinado, pensar sobre el uso de Visual C ++. Su subsistema "alarm.h" alarma está diseñado para manejar las alarmas basadas en el reloj del sistema operativo. El puntero de función alarm_proc MFC puede ser envuelto en el interior funciones miembro de una clase CAlarm. A continuación, una clase CSchedule puede administrar objetos CAlarm para hacer su aplicación funcional.

Instrucciones

1 Comprender la función de puntero alarm_proc que está en el corazón del programa. Se acepta como parámetros el tiempo de ejecución de la alarma y un valor de identificador ID de alarma o de alarma. Aquí es su prototipo:


typedef void (* alarm_proc) (tiempo, int alarm_id);

2 Ponga alarm_proc en una clase, CAlarm, para darle instrucciones. Las funciones miembro de CAlarm representarán tareas simples, tales como activar, desactivar, establecer una hora y más. He aquí una sugerencia de cómo se podría implementar CAlarm:


CAlarm clase

{

pública:

typedef void (* alarm_proc) ();

// Crea una alarma

CAlarm (const CTime y hora, el fuego alarm_proc): Mtime (tiempo), mEnabled (true) {

mAlarm_proc = fuego;

}

~ CAlarm () {}

setTime anular (const CTime y hora) {

Mtime = tiempo;

}

const CTime y getTime () {const

volver Mtime;

}

bool isEnabled () {const

volver mEnabled;

}

fuego void () {const

mAlarm_proc ();

}

desactivar void () {

mEnabled = false;

}

permitir anular () {

mEnabled = true;

}

protegida:

bool mEnabled;

CTime Mtime;

mAlarm_proc alarm_proc mutable;

};

3 Diseñar una clase CScheduler para la manipulación de objetos CAlarm. Como mínimo, se debe hacer lo que hace un cronómetro típico. Es decir, se debe iniciar un bucle, deje de un bucle y restablecer, sino también añadir una alarma, eliminar una alarma y así sucesivamente. Lo que sigue es una sugerencia para una clase CScheduler. Sólo se muestran las funciones miembro públicas (interfaces de clase). La implementación de cada función miembro se deja como ejercicio para el programador:


clase CScheduler

{

pública:

CScheduler ();

~ CScheduler ();

AddAlarm void (int mango, const CTime y hora, CAlarm :: alarm_proc fuego);

RemoveAlarm void (int mango);

const CAlarm * Alarma (mango int) const;

CAlarm * Alarma (mango int);

StartLoop anular ();

StopLoop anular ();

IsRunning bool () const;

Void Reset ();

privada:

//

protegida:

//

};

4 Utilice una clase MFC CMAP para almacenar los objetos en la clase CAlarm CScheduler. Una matriz de CMAP es excelente para la indexación rápida y añadir / operaciones de borrado. Ponga la variable CMAP en el identificador de acceso "protegido" de la clase CScheduler. Esto es lo que parece:


CScheduler clase {

pública:

//

protegida:

CMAP mAlarms;

};

5 Crear una función que itera continuamente a través de los objetos CMap (CAlarms) y, si uno necesita para ser ejecutado, lo ejecuta. Que sea un amigo y lo puso en "protegido" en CScheduler, bajo mAlarms. Su implementación simplificada puede ser como sigue:


Iterar int (* CSchedule pSchedule) {

posición pos;

ID int;

CAlarm * pAlarm;

CTime tiempo;

mientras que (pSchedule-> isRunning ()) {

si (pSchedule-> mAlarms.IsEmpty ())

continuar;

tiempo = CTime :: GetCurrentTime ();

pos = pSchedule-> mAlarms.GetStartPosition ();

mientras que (pos! = NULL) {

pSchedule-> mAlarms.GetNextAssoc (pos, ID, pAlarm);

si (pAlarm-> getTime () <= tiempo) {

si (pAlarm-> isEnabled ())

pAlarm-> fuego ();

pAlarm-> setTime (pAlarm-> getTime ());

Eliminar pAlarm;

}

}

}

return 0;

}

6

Utilice la clase CScheduler en una aplicación MFC. No se ejecutará en otro lugar. Añadir los archivos cpp y h CScheduler y CAlarm a su proyecto. Hacer una instancia de la clase CSchedule en su aplicación. Y, por supuesto, no se olvide de llamar Iterar ().