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 |
