Symbian三种定时器的使用

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的使用
class CMyTimer : public CTimer
{
public:
static CMyTimer* NewLC();
static CMyTimer* NewL();
private:
CMyTimer():CTimer(EPriorityStandard){}
void ConstructL();
void RunL();
}

CMyTimer* CMyTimer::NewLC()
{
CMyTimer* self=new(ELeave) CMyTimer();
CleanupStack::PushL(self);
self->ConstructL();
return self;
}

CMyTimer* CMyTimer::NewL()
{
CMyTImer* self=CMyTimer::NewLC();
CleanupStack(self);
return self;
}

void CMyTimer::ConstructL()
{
CTimer::ConstructL(); //创建完上面RTimer对象的所有步骤
CActiveScheduler::Add(this);
After(5000000);
}

void CMyTimer::RunL()
{
//循环体,可以在此加入代码
After(5000000);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章