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);
}

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