原文出处:http://blog.csdn.net/Jenhwa/archive/2008/07/01/2602819.aspx
Symbian可用定时器种类: CTimer,RTimer,CPeriodic,CHearBeat
1.CPeriodic用法:因其简易性,最常被使用,需要实现回调函数。
class CMyTimer : public CBase
{
public:
CMyTimer();
void StartTimer();
void CancelTimer();
static TInt Loop(TAny* aPtr);//回调函数
private:
CPeriodic* iTimer;
}
CMyTimer::CMyTimer()
{
iTimer=CPeriodic::NewL(CActive::EPriorityStandard);
StartTimer();
}
void CMyTimer::StartTimer()
{
iTimer->Start(500000,500000,TCallBack(Loop,this));//请求只需发送一次
}
void CMyTimer::CancelTimer()
{
iTimer->Cancel();
}
TInt CMyTimer::Loop(TAny* aPtr)
{
//循环体,可以在此加入代码
}
2.RTimer用法:需要配合CActive对象进行使用
class CMyTimer : public CActive
{
public:
CMyTimer();
private:
void RunL();
void DoCancel();
void StartTimer();
private:
RTimer iTimer;
}
CMyTimer::CMyTimer()
:CActive(EPriorityStandard)
{
iTimer.CreateLocal();
CActiveScheduler::Add(this);
StartTimer();
}
void CMyTimer::RunL()
{
if(iStatus.Int()==KErrNone)//iStatus为CActive的成员变量,切勿自己定义
{
//循环体,可以在此加入代码
StartTimer();
}
}
void CMyTimer::DoCancel()
{
iTimer.Cancel();
}
void CMyTimer::StartTimer()
{
if(IsActive())return;
iTimer.After(iStatus,500000);
SetActive();
}
3.CTimer用法:CTimer需要被继承使用,CTimer封装了对RTimer的使用