Tag Archives: contador

Classe de Timer para Allegro

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

Google Buzz