Om du vill ha ett larm program så att du kan komma ihåg att utföra en viss uppgift till en viss tid , tycker om att använda Visual C + + . Dess larm delsystemet " alarm.h " är utformad för att hantera larm baserade på operativsystemet klockan . Maskinen alarm_proc funktionspekare kan lindas inuti medlemsfunktioner i en CAlarm klassen. Sedan en CSchedule klass kan hantera CAlarm objekt för att göra din ansökan funktionell . Saker du behöver Review, en IDE som Visual Studio . NET 2005
Visa fler instruktioner
1
Förstå alarm_proc funktion pekare som är kärnan i programmet . Det tar som parametrar exekveringstiden av larmet och ett larm -ID eller alarm handtag värde . Här är dess prototyp : typedef void ( * alarm_proc ) ( int tid , int alarm_id ) , Sida 2
Sätt alarm_proc i en klass , CAlarm , för att ge det instruktioner . Medlemsföretagen funktioner CAlarm kommer att representera enkla uppgifter som möjligt , avaktivera , sätta en tid och mer . Här är ett förslag på hur man skulle kunna genomföra CAlarm : class CAlarm
{
offentliga
:
typedef void ( * alarm_proc ) ( ) , kommenterar: //skapar ett larm
CAlarm ( const ctime & tid , alarm_proc brand ) : Mtime ( tid ) , mEnabled ( true ) {
mAlarm_proc = eld ,
}
~ CAlarm ( ) { }
void setTime ( const ctime & tid ) {
Mtime = tid ,
}
const ctime & getTime ( ) const {
avkastning Mtime ,
}
bool isEnabled ( ) const {
avkastning mEnabled ;
}
void fire ( ) const {
mAlarm_proc ( ) ;
}
void avaktivera ( ) {
mEnabled = false;
}
void aktivera ( ) {
mEnabled = true;
}
skyddade
:
bool mEnabled ,
ctime Mtime ,
föränderlig alarm_proc mAlarm_proc ,
} ;
3
Design en CScheduler klass för att manipulera CAlarm objekt . Åtminstone borde den göra vad en typisk stoppur gör . Det vill säga, bör den börja en slinga , sluta en slinga och återställa , men även lägga ett larm , ta bort ett larm och så vidare. Nedan följer ett förslag på en CScheduler klass . Endast offentliga medlem funktioner ( klass gränssnitt ) visas . Genomförandet av varje delfunktion är kvar som en övning för programmeraren : class CScheduler
{
offentliga
:
CScheduler ( ) ;
~ CScheduler ( ) ;
void AddAlarm ( int handtag , const ctime & tid , CAlarm :: alarm_proc brand ) ,
void RemoveAlarm ( int handtag ) ,
const CAlarm * Larm ( int handtag ) const;
CAlarm * Larm ( int handtag ) ;
void StartLoop ( ) ;
void StopLoop ( ) ;
bool IsRunning ( ) const;
void Reset ( ) ;
privat
: Twitter //
skyddad Blogg:
//
};
4
Använd en MFC CMap klass för att lagra CAlarm objekt i CScheduler klassen . En CMap array är utmärkt för snabb indexering och lägga till /ta bort funktioner . Sätt CMap variabel i den "skyddade " access identifierare för CScheduler klassen. Såhär ser det ut : class CScheduler {
offentliga
:
//
skyddade
:
CMap mAlarms ,
} ;
5
Skapa en funktion som kontinuerligt itererar genom CMap objekten ( CAlarms ) och , om man behöver verkställas , utför det. Gör det till en kompis och lägga den i " skyddad " i CScheduler under mAlarms . Dess förenklad tillämpning kan vara följande : int Iterate ( CSchedule * pSchedule ) {
POSITION pos ;
int ID ;
CAlarm * pAlarm ;
ctime tid,
while ( pSchedule -> isRunning ( ) ) {
om ( pSchedule - > mAlarms.IsEmpty ( ) ) katalog fortsätta ,
tid = ctime :: GetCurrentTime ( ) ;
pos = pSchedule - > mAlarms.GetStartPosition ( ) ;
medan ( pos! = null ) {
pSchedule - > mAlarms.GetNextAssoc ( pos , ID , pAlarm ) ;
om ( pAlarm - > getTime ( ) if ( pAlarm - > isEnabled ( ) ) katalog pAlarm - > eld ( ) ;
pAlarm - > setTime ( pAlarm - > getTime ( ) ) ;
delete pAlarm ,
}
}
}
avkastning 0 ;
}
6
Använd CScheduler klassen i en MFC applikation . det kommer inte att köra någon annanstans . Tillsätt CScheduler och CAlarm cpp och h -filer till ditt projekt . Gör en instans av CSchedule klassen i din ansökan . och Naturligtvis , glöm inte att ringa Iterate ( ) .