Si vous voulez une application d'alarme afin que vous puissiez penser à effectuer une tâche particulière à certains moments , pensez à l'aide de Visual C + + . Son sous-système d'alarme " alarm.h " est conçu pour gérer des alarmes basées sur l'horloge du système d'exploitation. Le alarm_proc pointeur de fonction MFC peut être enroulé à l'intérieur des fonctions membres d'une classe CAlarm . Puis une classe de CSchedule peut gérer des objets CAlarm pour rendre votre application fonctionnelle . Les choses dont vous aurez besoin
Un IDE tel que Visual Studio. NET 2005
Show More Instructions
1
comprendre le pointeur de fonction alarm_proc qui est au cœur du programme. Elle accepte comme paramètres le temps d'exécution de l'alarme et une identification de l'alarme ou de la valeur de la poignée d'alarme. Voici son prototype: typedef void (* alarm_proc ) ( int temps , int alarm_id ) ; Page 2
Mettez alarm_proc dans une classe , CAlarm , pour lui donner des instructions . Les fonctions de membres du CAlarm représenteront tâches simples telles que activer, désactiver , en fixant un temps et plus . Voici une suggestion sur la façon dont vous pourriez mettre en œuvre CAlarm : classe CAlarm
{ publique
: typedef void (* alarm_proc ) ();
//crée une alarme
CAlarm (const CTime et heure, alarm_proc feu ) : mTime (temps) , mEnabled ( true) {
mAlarm_proc = feu ;
}
~ CAlarm () { }
vide setTime (const CTime et heure) {
mTime = temps ; }
const CTime & getTime () const {
mTime de retour; }
bool isEnabled () const {
retour mEnabled ;
} of Fire void () const {
mAlarm_proc (); }
vide désactiver () {
mEnabled = false; }
vide permettre () { < br > mEnabled = true; }
protégé
: bool mEnabled ;
mTime de CTime ;
mutable alarm_proc mAlarm_proc ;
};
3
Concevoir une classe CScheduler pour manipuler des objets CAlarm . Au minimum , il faut faire ce que d'un chronomètre typique fait. Autrement dit, il doit commencer une boucle, un arrêt de boucle et remis , mais aussi ajouter une alarme, supprimer une alarme et ainsi de suite . Voici une suggestion pour une classe CScheduler . Seules les fonctions membres publiques ( interfaces de classe ) sont affichés. La mise en œuvre de chaque fonction membre est laissé comme exercice pour le programmeur : classe CScheduler
{ publique :
CScheduler ();
~ CScheduler ();
vide AddAlarm (int poignée , const & CTime temps, CAlarm :: alarm_proc incendie) ;
vide RemoveAlarm (int handle);
const CAlarm * Alarme (int poignée) const ;
CAlarm * Alarme (int handle);
StartLoop void ();
vide StopLoop ();
IsRunning bool ( ) const ;
void Reset (); privé
: //< br > protégé
: //
};
4
utiliser une classe de CMap MFC pour stocker les objets CAlarm dans la classe CScheduler . Un tableau CMap est excellent pour l'indexation rapide et ajouter /supprimer des opérations. Mettez la variable CMap dans l'identificateur d'accès "protégé" de la classe CScheduler . Voici à quoi il ressemble : classe CScheduler { publique
: // protégé :
CMap mAlarms ;
};
5
créer une fonction qui parcourt sans cesse à travers les objets CMap ( CAlarms ) et , si on a besoin d' être exécutées , l'exécute. Faites-en à un ami et de le mettre en "protégé" dans CScheduler , sous mAlarms . Sa mise en œuvre simplifiée peut être comme suit : int Iterate ( CSchedule * pSchedule ) {
position POS ;
int ID ;
CAlarm * pAlarm ;
temps CTime ;
while ( pSchedule -> enFonctionnement ()) {
if ( pSchedule -> mAlarms.IsEmpty ())
continuer ;
temps = CTime :: GetCurrentTime ();
pos = pSchedule -> mAlarms.GetStartPosition ();
while ( pos! = NULL) {
pSchedule -> mAlarms.GetNextAssoc (pos , ID, pAlarm ) ;
if ( pAlarm -> getTime () if ( pAlarm -> isEnabled ())
pAlarm -> feu ();
pAlarm -> setTime ( pAlarm -> getTime ());
suppression pAlarm ;
}
} }
return 0;
}
6
Utilisez la classe CScheduler dans une application MFC . Cela ne fonctionnera pas ailleurs. Ajouter le CScheduler et CAlarm cpp et h fichiers à votre projet. Faire une instance de la classe CSchedule dans votre application. et , Bien sûr , n'oubliez pas d' appeler Iterate ().