Hvis du ønsker en alarm program, så du kan huske at udføre en bestemt opgave på et bestemt tidspunkt , tænke på at bruge Visual C + +. Dens alarm delsystem " alarm.h " er designet til at håndtere alarmer baseret på operativsystemet ur. MFC alarm_proc funktion pointer kan vikles ind medlem funktioner i et CAlarm klasse. Derefter en CSchedule klasse kan styre CAlarm objekter for at gøre din ansøgning funktionel. Ting du har brug
En IDE såsom Visual Studio. NET 2005
Vis Flere Instruktioner
1
Forstå alarm_proc funktion pointer , der er kernen i programmet. Det accepterer som parametre gennemførelsestid for alarm og en alarm -id eller alarm håndtag værdi. Her er dens prototype : typedef void ( * alarm_proc ) ( int tid , int alarm_id ),
2
Put alarm_proc ind i en klasse , CAlarm , for at give det instrukser . Medlemsvirksomhederne funktioner CAlarm vil repræsentere simple opgaver såsom aktivere , deaktivere, sætte en tid og meget mere. Her er et forslag om, hvordan man kunne implementere CAlarm : class CAlarm
{
offentlige
: Hej typedef void ( * alarm_proc ) (); Twitter //opretter en alarm
CAlarm ( const ctime & tid alarm_proc brand) : mtime (tid) mEnabled (sand) {
mAlarm_proc = brand,
}
~ CAlarm () { }
void setTime ( const ctime & tid) {
mtime = tid
}
const ctime & getTime () const {
tilbagevenden mtime ,
}
bool isEnabled () const {
tilbagevenden mEnabled ;
}
void brand ( ) const {
mAlarm_proc ();
}
void deaktivere () {
mEnabled = false;
}
void aktivere ( ) { < br > mEnabled = true;
}
beskyttet
: Hej bool mEnabled ,
ctime mtime ,
foranderlig alarm_proc mAlarm_proc ,
};
3
Design en CScheduler klasse til at manipulere CAlarm objekter. Som minimum bør det gøre, hvad en typisk stopur gør. Det vil sige, bør den begynde en løkke , stoppe en løkke og nulstillet, men også tilføje en alarm , fjerne en alarm og så videre . Følgende er et forslag til en CScheduler klasse. Kun de offentlige medlem funktioner ( klasse interfaces) vises. Implementering hvert medlem funktion efterlades som en øvelse for programmøren : class CScheduler
{
offentlige
: Hej CScheduler ();
~ CScheduler ();
void AddAlarm ( int håndtag , const ctime & tid CAlarm :: alarm_proc brand) ,
void RemoveAlarm ( int håndtag ),
const CAlarm * Alarm ( int håndtag) const ;
CAlarm * Alarm ( int håndtag) ; < br > void StartLoop ();
void StopLoop ();
bool IsRunning () const ;
void Reset ();
private
: Hej //< br > beskyttet
: Hej //
};
4
Brug en MFC Cmap klasse til at gemme CAlarm objekter i CScheduler klassen. En Cmap array er fremragende til hurtig indeksering og tilføje /slette operationer. Sæt Cmap variabel i "beskyttet " access id for det CScheduler klassen. Her er hvad det ser ud : class CScheduler {
offentlige
: Hej //
beskyttet
: Hej Cmap mAlarms ,
};
5
oprette en funktion , der hele tiden gentager gennem Cmap objekter ( CAlarms ) og, hvis man skal blive henrettet , udfører det . Gør det til en ven, og sætte det i "beskyttet " i CScheduler under mAlarms . Dens forenklet gennemførelse kan være som følger: int gentage ( CSchedule * pSchedule ) {
Pos ,
int ID ,
CAlarm * pAlarm ,
ctime tid
while ( pSchedule -> isRunning ( )) {
if ( pSchedule -> mAlarms.IsEmpty () )
fortsætter ,
tid = ctime :: GetCurrentTime ();
pos = pSchedule -> mAlarms.GetStartPosition (); < br >, mens ( pos! = NULL) {
pSchedule -> mAlarms.GetNextAssoc (POS , ID, pAlarm ),
if ( pAlarm -> getTime () if ( pAlarm -> isEnabled () )
pAlarm -> brand ();
pAlarm -> setTime ( pAlarm -> getTime ());
delete pAlarm ,
}
}
}
tilbagevenden 0;
}
6
Brug CScheduler klasse i en MFC applikation. den vil ikke køre andre steder. Tilsæt CScheduler og CAlarm cpp og h -filer til dit projekt. Lav en instans af CSchedule klasse i din ansøgning. og selvfølgelig , så glem ikke at kalde gentage ().