Wenn Sie einen Alarm Anwendung wollen , so dass Sie sich daran erinnern können , um eine bestimmte Aufgabe zu bestimmten Zeitpunkten ausführen , darüber nachzudenken, mit Visual C + +. Die Alarm -Subsystem " alarm.h " wurde entwickelt, um Alarme auf dem Betriebssystem -Uhr zu behandeln. Der MFC alarm_proc Funktion Zeiger kann innerhalb Member-Funktionen in einer Klasse CAlarm gewickelt werden. Dann ein CSchedule Klasse verwalten können CAlarm Objekte, um Ihre Anwendung funktional. Was Sie brauchen
einer IDE wie Visual Studio. NET 2005
anzeigen Weitere Anweisungen
1
Verstehen Sie die alarm_proc Funktion Zeiger , die im Mittelpunkt des Programms ist . Er akzeptiert als Parameter die Ausführungszeit der Alarm-und einen Alarm oder Alarm ID Handle-Wert . Hier ist sein Prototyp : typedef void (* alarm_proc ) (int Zeit , int alarm_id ); Seite 2
Put alarm_proc in eine Klasse , CAlarm , um ihm Anweisungen. Die Member-Funktionen von CAlarm vertreten einfache Aufgaben wie Aktivieren, Deaktivieren , Einstellen einer Zeit, und vieles mehr. Hier ist ein Vorschlag, wie man CAlarm implementieren : class CAlarm
{ Öffentlichkeit : Profil typedef void (* alarm_proc ) (); Twitter //erzeugt einen Alarm
CAlarm (const CTime & Zeit alarm_proc Feuer) : mTime (Zeit ) , mEnabled ( true) {
mAlarm_proc = Feuer ; }
~ CAlarm () {}
nichtig setTime (const CTime & Zeit) {
mTime = Zeit ; }
const CTime & getTime ( ) const {
Rückkehr mTime ; }
bool isEnabled ( ) const {
Rückkehr mEnabled ;
}
nichtig Feuer ( ) const {
mAlarm_proc (); }
nichtig deaktivieren () {
mEnabled = false; }
nichtig aktivieren () {
mEnabled = true; }
geschützt : Profil bool mEnabled ;
CTime mTime ;
mutable alarm_proc mAlarm_proc ;
};
3
Entwerfen Sie ein CScheduler Klasse zur Manipulation CAlarm Objekten. Zumindest sollte es tun, was ein typisches Stoppuhr tut. Das heißt, sollte es eine Schleife starten , zu stoppen und eine Schleife zurückzusetzen, aber auch hinzufügen, eine Alarmanlage, einen Alarm zu entfernen und so weiter. Es folgt ein Vorschlag für eine CScheduler Klasse. Nur die öffentlichen Member-Funktionen (Klasse Schnittstellen) werden angezeigt. Implementieren jedes Mitglied Funktion wird als eine Übung für den Programmierer überlassen : class CScheduler
{ Öffentlichkeit : Profil CScheduler ();
~ CScheduler ();
nichtig AddAlarm ( int handle , const CTime & Zeit CAlarm :: alarm_proc Feuer );
nichtig RemoveAlarm ( int handle );
const CAlarm * Alarm ( int handle ) const ;
CAlarm * Alarm (int handle);
Leere Startloop ();
nichtig StopLoop ();
bool IsRunning ( ) const ;
void Reset (); Private : Profil //
geschützt : Profil //Tablet };
4
Verwenden Sie ein MFC CMap Klasse, um die Objekte in der CAlarm CScheduler Klasse speichern. Ein CMap Array ist für schnelle Indizierung ausgezeichnet und hinzufügen /löschen . Setzen Sie den CMap Variable in der "protected" Zugang Kennung des CScheduler Klasse. Hier ist , wie es aussieht : class CScheduler { Öffentlichkeit : Profil // geschützt : Profil CMap mAlarms ;
};
5
erstellen Sie eine Funktion , die ständig durchläuft die CMap Objekte ( CAlarms ) und, falls man braucht, um ausgeführt werden , führt sie aus. Machen Sie es ein Freund und steckte es in " geschützten " in CScheduler unter mAlarms . Durch die vereinfachte Umsetzung kann wie folgt sein : int Iterate ( CSchedule * pSchedule ) {
POSITION pos ;
int ID ;
CAlarm * pAlarm ;
CTime Zeit ;
while ( pSchedule -> isRunning ()) {
if ( pSchedule -> mAlarms.IsEmpty ())
fortzusetzen;
time = CTime :: GetCurrentTime ();
pos = pSchedule -> mAlarms.GetStartPosition ();
while ( pos! = NULL ) {
pSchedule -> mAlarms.GetNextAssoc (pos , ID, pAlarm );
if ( pAlarm -> getTime () if ( pAlarm -> isEnabled ())
pAlarm -> Feuer ();
pAlarm -> setTime ( pAlarm -> getTime ());
löschen pAlarm ; }
} }
return 0;
Seite 6 }
Verwenden Sie die CScheduler Klasse in einer MFC-Anwendung . Es wird nicht an anderer Stelle ausgeführt . Fügen Sie den CScheduler und CAlarm cpp und h -Dateien auf Ihr Projekt. Machen Sie eine Instanz der Klasse CSchedule in Ihrer Anwendung. und natürlich vergessen Sie nicht, Iterate () aufrufen .