Symbian三种定时器的使用

原文出处: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的使用

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(); CActiveScheduler::Add(this); After(5000000); } void CMyTimer::RunL() { //循环体,可以在此加入代码 After(5000000); }

你可能感兴趣的:(Class,Symbian)