Als u een alarm applicatie wilt , zodat u zich kunt herinneren om een bepaalde taak uit te voeren op een bepaalde tijd, na te denken over het gebruik van Visual C + + . Het alarm subsysteem " alarm.h " is ontworpen om alarmen op basis van het besturingssysteem klok verwerken . De MFC alarm_proc functie pointer kan verpakt worden in lid functies in een CAlarm klasse . Dan kan een CSchedule klasse CAlarm objecten beheren om uw applicatie functioneel te maken . Wat je nodig hebt Een IDE zoals Visual Studio . NET 2005 Toon Meer Aanwijzingen 1 Begrijp de alarm_proc functie pointer dat is de kern van het programma . Zij aanvaardt als parameters de uitvoeringstijd van het alarm en een alarm ID of alarm handvat waarde . Hier is het prototype : typedef void ( * alarm_proc ) ( int tijd , int alarm_id ) ; 2 Doe alarm_proc in een klas , CAlarm , om het instructies geven . De functies lid van CAlarm zullen eenvoudige taken zoals het inschakelen, uitschakelen vertegenwoordigen , het instellen van een tijd en meer . Hier is een suggestie over hoe je CAlarm kon implementeren : class CAlarm { publiek : typedef void ( * alarm_proc ) ( ) ; Twitter //creëert een alarm CAlarm ( const CTime & tijd , alarm_proc brand ) : mtime ( tijd ) , mEnabled (true ) { mAlarm_proc = vuur ; } ~ CAlarm ( ) { } nietig setTime ( const CTime & tijd ) { mtime = tijd ; } const CTime & getTime ( ) const { return mtime ; } bool isEnabled ( ) const { return mEnabled ; } leegte brand ( ) const { mAlarm_proc ( ) ; } leegte uitschakelen ( ) { mEnabled = false; } leegte staat ( ) { < br > mEnabled = true; } beschermd : bool mEnabled ; CTime mtime ; veranderlijk alarm_proc mAlarm_proc ; } ; Ontwerp 3 een CScheduler klasse voor het manipuleren CAlarm objecten. Op minimum , moet doen wat een typische stopwatch doet . Dat is , moet het een lus starten , stoppen een lus en reset , maar ook toevoegen een alarm , verwijdert een alarm en ga zo maar door . Hieronder vindt u een suggestie voor een CScheduler klasse . Alleen de functies publiek lid ( klasse interfaces ) worden getoond . Uitvoering van elk lid functie wordt overgelaten als een oefening voor de programmeur : class CScheduler { publiek : CScheduler ( ) ; ~ CScheduler ( ) ; leegte AddAlarm ( int handvat , const CTime & tijd , CAlarm :: alarm_proc brand ) ; leegte RemoveAlarm ( int behandelen ) ; const CAlarm * Alarm ( int handvat ) const ; CAlarm * Alarm ( int handle ) ; < br > leegte StartLoop ( ) ; leegte StopLoop ( ) ; bool IsRunning ( ) const ; void Reset ( ) ; prive : //< br > beschermd : // } ; Goedkope 4 Gebruik een MFC CMap klasse aan de CAlarm objecten op te slaan in de CScheduler klasse . Een CMap array is uitstekend geschikt voor snelle indexering en voeg /activiteiten verwijderen . Zet de CMap variabele in de "beschermde " toegang identifier van de CScheduler klasse . Hier is hoe het eruit ziet : class CScheduler { publiek : // beschermd : CMap mAlarms ; } ; 5 Maak een functie die continu doorloopt de CMap objecten ( CAlarms ) en , indien men nodig heeft om te worden uitgevoerd , voert het uit . Maak er een vriend en zet het in " beschermde " in CScheduler , onder mAlarms . De vereenvoudigde implementatie kan worden als volgt : int itereren ( CSchedule * pSchedule ) { POSITIE pos ; int ID ; CAlarm * pAlarm ; CTime tijd ; terwijl ( pSchedule - > isRunning ( ) ) { if ( pSchedule - > mAlarms.IsEmpty ( ) ) op blijven ; tijd = CTime :: GetCurrentTime ( ) ; pos = pSchedule - > mAlarms.GetStartPosition ( ) ; < br > terwijl ( pos! = NULL ) { pSchedule - > mAlarms.GetNextAssoc ( pos , ID , pAlarm ) ; if ( pAlarm - > getTime ( ) if ( pAlarm - > isEnabled ( ) ) op Twitter pAlarm - > fire ( ) ; pAlarm - > setTime ( pAlarm - > getTime ( ) ) ; delete pAlarm ; } } } return 0 ; } 6 Gebruik de klasse CScheduler in een MFC -toepassing. het zal niet elders lopen . Voeg de CScheduler en CAlarm cpp -en h -bestanden naar uw project . Maak een instantie van de klasse CSchedule in uw toepassing . en , Natuurlijk , vergeet dan niet te herhalen ( ) noemen .
|