Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
This page was last modified 10:48, 31 October 2007.

Temporizador utilizando CPeriodic

From Forum Nokia Wiki

A classe CPeriodic é utilizada para gerar eventos em um determinado espaço de tempo, normalmente eventos que não necessitam de uma grande precisão de tempo.

Função de Retorno

Sua definição é bastante simples, uma função será chamada após um intervalo de n microsegundos (starter time) e então após n microsegundos erá será chamada repetinamente até ser interrompida (delay time). Para isso é utilizada uma função de retorno (do Inglês, callback function) definida através da classe TCallBack.

Esta função de retorno precisa ser estática ou não pertecer a nenhuma classe.

Exemplo:

class CMinhaClasse
{
     public:
            static TInt FuncaoRetorno(TAny* aPtr);
            TInt FazerAlgo();
};

Dentro do método FuncaoRetorno() faremos a chamada ao métodoFazerAlgo(). O retorno da FuncaoRetorno() deve ser verdadeiro caso queira ser chamada novamente pelo temporizador.

É passado como argumento um ponteiro para a instância da classe que a contêm.

TInt CMinhaClasse::FuncaoRetorno(TAny* aPtr)
{
     return ((CMinhaClasse*)aPtr)->FazerAlgo();
}

Caso queira parar a chamada dessa função basta o método FazerAlgo() retornar 0.

Classe CPeriodic

class CMinhaClasse
{
     public:
            static TInt FuncaoRetorno(TAny* aPtr);
            TInt FazerAlgo();
            virtual ~CMinhaClasse();
     private:
            CPeriodic* iTemporizador;
            void ConstructL();
};

Será criada uma istância da classe CPeriodic e então será feita uma chamada ao método CPeriodic::Start() para inicializar o temporizador. A definição desta função é:

void Start(TTimeIntervalMicroSeconds32 aDelay,TTimeIntervalMicroSeconds32 anInterval,TCallBack aCallBack);

Onde: aDelay = Intervalo em microsegundos para a inicialização do temporizador.
anInterval = De quanto em quantos microsegundos esta função será chamada.
aCallBack = Função de retorno, esta é a função que será chamada enquanto o temporizador estiver trabalhando.

Na construção do temporizador é passado como argumento a prioridade que ele terá para sua execução. Caso a precisão seja algo necessário este valor deve ser mais alto que os outros objetos ativos. 0 é um valor neutro.

const TTimeIntervalMicroSeconds32 KPeriodo = 100000;
void CMinhaClasse::ConstructL()
{
     iTemporizador = CPeriodic::NewL(0);
     iTemporizador->Start(KPeriodo, KPeriodo, TCallBack(FuncaoRetorno, this));
}
 
CMinhaClasse::~CMinhaClasse()
{
     if(iTemporizador)
     {
         delete iTemporizador;
         iTemporizador = NULL;
     }
}

Parando o temporizador

Para parar a execução do temporizador basta fazer uma chamada a função CActive::Cancel(). Exemplo:

void CMinhaClasse::PararTemporizador()
{
     iTemporizador->Cancel();
}
Related Discussions
Thread Thread Starter Forum Replies Last Post
CPeriodic的问题 cidhx Symbian 1 2003-12-12 02:50
the timer event between the emulator and the real device team-vx General Symbian C++ 11 2007-09-01 12:04
ayuda con posicionamiento tenre Foro en Español (Spanish Forum) 0 2007-12-14 08:55
how to use accurate timer? dreamplayer General Symbian C++ 1 2004-04-15 09:44
Is it possible to autostart a server? amfat General Symbian C++ 25 2007-08-22 10:42
 
Powered by MediaWiki
     
     RDF Facets:
     
     
     qfnZtypeQUqfnTypeZCommunityContentQ
     qfnZtypeQUqfnTypeZWebpageQ
     qfnZtypeQUqfnTypeZWikiContentQ
     qmarsZlanguageQUxhttpE3aE2fE2fswE2enokiaE2ecomE2flanguageE2d1E2fenX