Symbian可用定時器種類: CTimer,RTimer,CPeriodic,CHearBeat
1.CPeriodic用法:因其簡易性,最常被使用,需要實現回呼函數。
class CMyTimer : public CBase<br />{<br />public:<br /> CMyTimer();<br /> void StartTimer();<br /> void CancelTimer();<br /> static TInt Loop(TAny* aPtr);//回呼函數<br />private:<br /> CPeriodic* iTimer;<br />} </p><p>CMyTimer::CMyTimer()<br />{<br /> iTimer=CPeriodic::NewL(CActive::EPriorityStandard);<br /> StartTimer();<br />} </p><p>void CMyTimer::StartTimer()<br />{<br /> iTimer->Start(500000,500000,TCallBack(Loop,this));//請求只需發送一次<br />} </p><p>void CMyTimer::CancelTimer()<br />{<br /> iTimer->Cancel();<br />} </p><p>TInt CMyTimer::Loop(TAny* aPtr)<br />{<br /> //迴圈體,可以在此加入代碼<br />}<br />
2.RTimer用法:需要配合CActive對象進行使用
class CMyTimer : public CActive<br />{<br />public:<br /> CMyTimer();<br />private:<br /> void RunL();<br /> void DoCancel();<br /> void StartTimer();<br />private:<br /> RTimer iTimer;<br />} </p><p>CMyTimer::CMyTimer()<br />:CActive(EPriorityStandard)<br />{<br /> iTimer.CreateLocal();<br /> CActiveScheduler::Add(this);<br /> StartTimer();<br />} </p><p>void CMyTimer::RunL()<br />{<br /> if(iStatus.Int()==KErrNone)//iStatus為CActive的成員變數,切勿自己定義<br /> {<br /> //迴圈體,可以在此加入代碼<br /> StartTimer();<br /> }<br />} </p><p>void CMyTimer::DoCancel()<br />{<br /> iTimer.Cancel();<br />} </p><p>void CMyTimer::StartTimer()<br />{<br /> if(IsActive())return;<br /> iTimer.After(iStatus,500000);<br /> SetActive();<br />}<br />
3.CTimer用法:CTimer需要被繼承使用,CTimer封裝了對RTimer的使用
class CMyTimer : public CTimer<br />{<br />public:<br /> static CMyTimer* NewLC();<br /> static CMyTimer* NewL();<br />private:<br /> CMyTimer():CTimer(EPriorityStandard){}<br /> void ConstructL();<br /> void RunL();<br />} </p><p>CMyTimer* CMyTimer::NewLC()<br />{<br /> CMyTimer* self=new(ELeave) CMyTimer();<br /> CleanupStack::PushL(self);<br /> self->ConstructL();<br /> return self;<br />} </p><p>CMyTimer* CMyTimer::NewL()<br />{<br /> CMyTImer* self=CMyTimer::NewLC();<br /> CleanupStack(self);<br /> return self;<br />} </p><p>void CMyTimer::ConstructL()<br />{<br /> CTimer::ConstructL();<br /> CActiveScheduler::Add(this);<br /> After(5000000);<br />} </p><p>void CMyTimer::RunL()<br />{<br /> //迴圈體,可以在此加入代碼<br /> After(5000000);<br />}<br />