Se você quiser um aplicativo de alarme para que você possa se lembrar de executar uma tarefa específica em determinado período de tempo , pense em usar o Visual C + +. O alarme subsistema " alarm.h " é projetado para lidar com alarmes com base no relógio do sistema operacional. O alarm_proc ponteiro de função MFC pode ser acondicionada dentro funções de membro em uma classe CAlarm . Em seguida, uma classe CSchedule pode gerenciar objetos CAlarm para tornar a sua aplicação funcional . Coisas que você precisa
Uma IDE como o Visual Studio. NET 2005
Show Mais instruções
1
Entenda o ponteiro de função alarm_proc que está no coração do programa. Ele aceita como parâmetros o tempo de execução do alarme e um ID de alarme ou alarme valor do identificador . Aqui é o seu protótipo : typedef void ( * alarm_proc ) ( tempo int, int alarm_id ); Página 2
Coloque alarm_proc em uma classe , CAlarm , para dar-lhe instruções . As funções de membro do CAlarm representará tarefas simples, como ativar, desativar , estabelecendo um tempo e muito mais. Aqui vai uma sugestão de como você poderia implementar CAlarm : classe CAlarm
{
público :
typedef void ( * alarm_proc ) ();
//cria um alarme
CAlarm (const CTime e hora, alarm_proc fogo ) : mtime (tempo) mEnabled (true) {
mAlarm_proc = fogo ;
}
~ CAlarm () {}
setTime void ( const CTime e hora) {
mtime = tempo ; }
const CTime & getTime () const {
retornar mtime ;
}
bool isEnabled () const {
retornar mEnabled ;
}
fogo void ( ) const {
mAlarm_proc (); }
disable void ( ) {
mEnabled = false; }
vazio permitir () { < br > mEnabled = true; }
protegido
:
bool mEnabled ;
CTime mtime ;
mutável mAlarm_proc alarm_proc ;
};
3
Projete uma classe CScheduler para manipular objetos CAlarm . No mínimo, ele deve fazer o que um cronômetro normal faz. Ou seja, ele deve iniciar um loop, parar um loop e redefinir , mas também adicionar um alarme, remover um alarme e assim por diante . A seguir é uma sugestão para uma classe CScheduler . Apenas as funções de membro público (interfaces de classe) são mostrados. Implementação de cada função de membro é deixado como um exercício para o programador : classe CScheduler
{
pública , Foto:
CScheduler ();
~ CScheduler ();
AddAlarm vazio (int handle , const CTime e hora, CAlarm :: alarm_proc fogo );
RemoveAlarm void ( int handle) ;
CAlarm const * Alarme (int handle) const;
CAlarm * Alarme (int handle) ;
vazio StartLoop ();
anular StopLoop ();
bool IsRunning () const;
void Reset ();
privado :
//< br > protegido
:
//Tablet };
4
Use uma classe do MFC CMap para armazenar os objetos CAlarm na classe CScheduler . Uma matriz CMap é excelente para indexação rápida e adicionar /excluir operações. Coloque a variável CMap no identificador de acesso "protegido" da classe CScheduler . Aqui está o que parece : classe CScheduler {
público :
//
protegido :
CMap mAlarms ;
};
5
Crie uma função que continuamente percorre os objetos CMap ( CAlarms ) e , se a pessoa precisa ser executado, executa. Torná-lo um amigo e colocá-lo em "protegido" em CScheduler , sob mAlarms . Sua implementação simplificada pode ser a seguinte : int iterate ( CSchedule * pSchedule ) { posição pos
;
int ID ;
CAlarm * pAlarm ;
CTime tempo;
while ( pSchedule -> IsRunning ()) {
if ( pSchedule -> mAlarms.IsEmpty ())
continuar ;
time = CTime :: GetCurrentTime ();
pos = pSchedule -> mAlarms.GetStartPosition ();
while ( pos! = NULL ) {
pSchedule -> mAlarms.GetNextAssoc (pos , ID , pAlarm );
if ( pAlarm -> getTime () if ( pAlarm -> isEnabled ())
pAlarm -> fogo ();
pAlarm -> setTime ( pAlarm -> getTime ());
apagar pAlarm ;
} } }
retornar 0 ;
}
6
Use a classe CScheduler em um aplicativo MFC. Ele não será executado em outro lugar. Adicione o cpp CScheduler e CAlarm e arquivos h ao seu projeto. Faça uma instância da classe CSchedule em sua aplicação. e é claro, não se esqueça de chamar Iterate ().