Wie Sie eine MFC-Anwendung Alarm

December 21

Wenn Sie ein Warnungsanwendung möchten, so dass Sie sich erinnern können, eine bestimmte Aufgabe zu bestimmten Zeiten ausführen, mithilfe von Visual C++ überlegen. Die Wecker-Subsystem "alarm.h" soll Alarme basiert auf der Betriebssystem-Uhr zu behandeln. Der MFC-Alarm_proc-Funktionszeiger kann innerhalb der Member-Funktionen in einer CAlarm Klasse eingebunden werden. Dann gelingt eine CSchedule-Klasse CAlarm-Objekte, um Ihre Anwendung funktionsfähig zu machen.

Anweisungen

1 Verstehen Sie den Alarm_proc-Funktionszeiger, der das Herzstück des Programms ist. Sie akzeptiert als Parameter die Ausführungszeit von Alarm und ein Alarm-ID oder Alarmwert Handle. Hier ist der Prototyp:

Typedef-Lücke (* Alarm_proc) (Int Alarm_id, Int Zeit);

2 Setzen Sie Alarm_proc in einer Klasse, CAlarm, um Anweisungen zu geben. Die Memberfunktionen der CAlarm werden einfache Aufgaben wie das aktivieren, deaktivieren, Einstellen einer Zeit und mehr vertreten. Hier ist ein Vorschlag auf, wie Sie CAlarm umsetzen könnte:

Klasse CAlarm

{

öffentliche:

Typedef-Lücke (* alarm_proc)();

erstellt einen alarm

CAlarm (const CTime & Zeit, Alarm_proc-Feuer): mTime(time), mEnabled(true) {}

mAlarm_proc = Feuer;

}

~ CAlarm() {}

privatevoid SetTime (const CTime & Zeit) {}

mTime = Time;

}

const CTime & Datumnachricht const {}

mTime zurück;

}

Bool isEnabled() const {}

Rückkehr mEnabled;

}

privatevoid fire() const {}

mAlarm_proc();

}

void Disable()-Methoden {}

mEnabled = False;

}

void enable()-Methoden {}

mEnabled = True;

}

geschützt:

Bool mEnabled;

CTime mTime;

veränderbare Alarm_proc mAlarm_proc;

};

3 Entwerfen Sie eine CScheduler-Klasse zum Bearbeiten von CAlarm-Objekten. Zumindest sollte es tun, was eine typische Stoppuhr tut. Das heißt, es sollte starten eine Schleife, eine Schleife beenden und zurücksetzen, aber fügen Sie auch einen Alarm, Alarm usw. zu entfernen. Es folgt ein Vorschlag für eine CScheduler-Klasse. Nur die öffentlichen Member-Funktionen (Klassenschnittstellen) werden angezeigt. Jeder Member-Funktion zu implementieren ist als Übung für den Programmierer Links:

Klasse CScheduler

{

öffentliche:

CScheduler();

~ CScheduler();

void AddAlarm (Int Handle, const CTime & Zeit, CAlarm::alarm_proc Feuer);

void RemoveAlarm (Int Handle);

const CAlarm * Alarm(int handle) const;

CAlarm * Alarm(int handle);

void StartLoop();

void StopLoop();

Bool IsRunning() const;

void Reset();

Privat:

//

geschützt:

//

};

4 Verwenden Sie eine MFC-CMap-Klasse zum Speichern der CAlarm-Objekte in der CScheduler-Klasse. Eine Array CMap eignet sich hervorragend für schnelle Indizierung und Hinzufügen/Löschen von Vorgängen. Setzen Sie die CMap-Variable in der Bezeichner "geschützten" Zugang der CScheduler-Klasse. Hier ist, wie es aussieht:

Klasse CScheduler {}

öffentliche:

//

geschützt:

CMap mAlarms;

};

5 Erstellen Sie eine Funktion, die kontinuierlich durchläuft die CMap-Objekte (CAlarms), und wenn man werden ausgeführt muss, es führt. Machen Sie es einen Freund und steckte es in die "geschützt" in CScheduler, unter mAlarms. Die vereinfachte Implementierung kann wie folgt aussehen:

Int Iterate (CSchedule * pSchedule) {}

Stellung pos;

Int ID;

CAlarm * pAlarm;

CTime Zeit;

während (pSchedule -> {isRunning())}

Wenn (pSchedule mAlarms.IsEmpty()) ->

weiter;

Zeit = CTime::GetCurrentTime();

POS = pSchedule -> mAlarms.GetStartPosition();

{while(POS!=Null)}

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

Wenn (pAlarm Datumnachricht ->Wenn (pAlarm isEnabled()) ->

pAlarm -> fire();

pAlarm -> SetTime (pAlarm -> getTime());

Löschen Sie pAlarm;

}

}

}

return 0;

}

6 Verwenden Sie die CScheduler-Klasse in einer MFC-Anwendung. Es läuft nicht anderswo. Die CScheduler und CAlarm Cpp und h-Dateien zum Projekt hinzufügen. Stellen Sie eine Instanz der Klasse CSchedule in Ihrer Anwendung. Und, natürlich, vergessen Sie nicht, rufen Sie Iterate().