Como eu disse no artigo de Timer no Allegro, eu vou postar uma classe que eu fiz para auxiliar o trabalho com timers.
Para utilizar, basta fazer assim:
CTimer *timer1 = new CTimer(SECS_TO_TIMER(1)); // Timer para 1 segundo
Eu criei o timer, porém ele ainda não está contando, para iniciar ele, faça assim:
timer1->Start();
Para pausar:
timer1->Pause();
Para pegar a contagem:
timer1->getCount();
Para resetar o contador:
timer1->Reset();
Vou citar também o método getStatus, que retorna o status atual do Timer, TIMER_PAUSED, se ele estiver pausado e TIMER_STARTED se ele estiver funcionando.
Está bem simples, porém é bem útil! =D
Aqui está o código:
CTimer.h
/***************************************************\
** Desenvolvido por CrociDB **
** **
** Voce pode usar a vontade este codigo, desde que **
** coloque os devidos creditos ao autor original. **
** **
** Nao me resposabilizo por seus atos com este **
** codigo. **
** **
\***************************************************/
#include <allegro.h>
#define TIMER_PAUSED 0
#define TIMER_STARTED 1
class CTimer
{
private:
int iCount;
int velocidade;
int status;
static void update(void *param);
public:
CTimer(int vel);
~CTimer();
void Start();
void Pause();
int getCount();
void Reset();
int getStatus();
void desc();
};
CTimer.cpp
/***************************************************\
** Desenvolvido por CrociDB **
** **
** Voce pode usar a vontade este codigo, desde que **
** coloque os devidos creditos ao autor original. **
** **
** Nao me resposabilizo por seus atos com este **
** codigo. **
** **
\***************************************************/
#include "CTimer.h"
CTimer::CTimer(int vel)
{
this->velocidade = vel;
iCount = 0;
status = TIMER_PAUSED;
LOCK_VARIABLE(iCount);
LOCK_FUNCTION(update);
}
void CTimer::update(void *param)
{
CTimer *pthis = (CTimer*)param;
++(pthis->iCount);
} END_OF_FUNCTION(update)
void CTimer::Start()
{
install_param_int(CTimer::update, this, velocidade);
status = TIMER_STARTED;
}
void CTimer::Pause()
{
remove_param_int(CTimer::update, this);
status = TIMER_PAUSED;
}
int CTimer::getCount()
{
return this->iCount;
}
void CTimer::Reset()
{
this->iCount = 0;
}
int CTimer::getStatus()
{
return status;
}
void CTimer::desc()
{
this->iCount--;
}
CTimer::~CTimer()
{
remove_param_int(CTimer::update, this);
}
Eu uso ele em quase todos os meus projetos, e você pode usar a vontade! hihihi
Valeu, qualquer dúvida posta aeeew! =D
Contato