Hvis du ønsker en alarm program slik at du kan huske å utføre en bestemt oppgave på visse tidspunkt , tenke på å bruke Visual C + + . Dens alarm delsystemet " alarm.h " er designet for å håndtere alarmer basert på operativsystemet klokke. MFC alarm_proc funksjon peker kan pakkes inni medlem funksjoner i en CAlarm klasse. Deretter en CSchedule klassen klarer CAlarm objekter for å gjøre programmet funksjonelle. Du trenger:
En IDE som Visual Studio. NET 2005
Vis flere instruksjoner
en
forstå alarm_proc funksjon peker som er i hjertet av programmet. Det aksepterer som parametre utførelsen tiden av og alarm -ID eller alarm håndtak verdi. Her er dens prototype : typedef void ( * alarm_proc ) ( int tid , int alarm_id ) ;
2
Sett alarm_proc inn i en klasse , CAlarm , for å gi den instruksjoner . Medlemsorganisasjonene funksjoner CAlarm vil representere enkle oppgaver som å aktivere, deaktivere , sette en tid og mer . Her er et forslag på hvordan du kan implementere CAlarm : class CAlarm
{
public :
typedef void ( * alarm_proc ) (); Twitter //oppretter en alarm
CAlarm ( const ctime og tid , alarm_proc brann) : mtime (tid ) , mEnabled ( true) {
mAlarm_proc = brann;
} product: ~ CAlarm ( ) { }
void setTime ( const endringsdato og klokkeslett) {
mtime = tid ;
}
const ctime & getTime ( ) const {
retur mtime ;
}
bool isEnabled ( ) const {
retur mEnabled ;
}
ugyldig brann ( ) const {
mAlarm_proc ();
}
ugyldig deaktivere ( ) {
mEnabled = false;
}
ugyldig aktivere ( ) {
mEnabled = true;
}
beskyttet :
bool mEnabled ;
ctime mtime ;
foranderlig alarm_proc mAlarm_proc ;
};
3
Design en CScheduler klasse for å manipulere CAlarm stedene. Som et minimum bør det gjøre hva en typisk stoppeklokke gjør. Det er, bør den starte en loop, stoppe en løkke og nullstille , men også legge til en alarm , fjerne en alarm , og så videre . Følgende er et forslag til en CScheduler klasse. Bare de offentlige medlem funksjoner ( klasse grensesnitt ) er vist . Implementering av hvert medlem funksjon er igjen som en øvelse for programmerer : class CScheduler
{
offentlig :
CScheduler (); product: ~ CScheduler ();
ugyldig AddAlarm ( int håndtak, const ctime og tid , CAlarm :: alarm_proc brann) ;
void RemoveAlarm ( int håndtak) ;
const CAlarm * Alarm ( int håndtak) const ;
CAlarm * Alarm ( int håndtak) ;
void StartLoop ();
void StopLoop ();
bool IsRunning ( ) const ;
void Reset ( ) ;
private Bilde: Twitter //
beskyttet Bilde: Twitter //
};
4
Bruk en MFC CMap klasse å lagre CAlarm gjenstander i CScheduler klassen . En CMap matrise er utmerket for rask indeksering og legge til /slette operasjoner. Sett CMap variabel i "beskyttet " tilgang identifikator av CScheduler klassen . Her er hva det ser slik ut: class CScheduler {
offentlige Bilde: Twitter //
beskyttet :
CMap mAlarms ;
};
5
Lag en funksjon som stadig gjentas gjennom CMap gjenstander ( CAlarms ) , og hvis man har behov for å bli henrettet , utfører det . Gjør det til en venn, og sette den i "beskyttet " i CScheduler under mAlarms . Dens forenklet gjennomføring kan være som følger : int Iterate ( CSchedule * pSchedule ) {
Pos ;
int ID ;
CAlarm * Palarm ;
ctime tid,
while ( pSchedule - > isRunning ( ) ) {
if ( pSchedule - > mAlarms.IsEmpty ( ) )
fortsette,
tid = ctime :: GetCurrentTime ();
pos = pSchedule - > mAlarms.GetStartPosition ();
while ( pos! = NULL) {
pSchedule - > mAlarms.GetNextAssoc ( pos , ID, Palarm ) ;
if ( Palarm - > getTime ( ) if ( Palarm - > isEnabled ( ) )
Palarm - > ild ();
Palarm - > setTime ( Palarm - > getTime ( ));
slett Palarm ;
}
}
}
return 0 ;
}
6
Bruk CScheduler klasse i en MFC applikasjon . den vil ikke kjøre andre steder. Tilsett CScheduler og CAlarm cPP og h filer til prosjektet. Lag en forekomst av CSchedule klassen i programmet. and , selvfølgelig , ikke glem å ringe Iterate ( ) .