用过timer的人都知道一般都需要继承一个类,加个回调,有的时候要用多个timer回调一个东西。总之用起来比较麻烦。
我简化了一下。希望对大家有用。
- /**
- * author :windcao windcao@people.com.cn
- * file: minitimer.h
- * desc: a mini and useful timer
- * copyright: windcao ,2004-08-02
- */
- #ifndef _WINDCAO_MINI_TIMER_
- #define _WINDCAO_MINI_TIMER_
- class MMiniTimerObserver
- {
- public:
- virtual void OnTimeOut(TInt id)=0;
- };
- class CMiniTimer:public CTimer
- {
- public:
- CMiniTimer(TInt aPriority,MMiniTimerObserver& aObserver,TInt aId=0)
- : CTimer(aPriority),iObserver(aObserver),iID(aId){ CActiveScheduler::Add(this);}
- virtual ~CMiniTimer(){ Cancel();}
- private:
- void RunL(){if(iStatus==KErrNone)iObserver.OnTimeOut(this->iID);}
- //don`t use this timer to at
- void At(const TTime& aTime){}
- MMiniTimerObserver & iObserver;
- TInt iID;
- };
- #endif _WINDCAO_MINI_TIMER_
使用方法:
1添加头文件#include "minitimer.h“
2实现MMiniTimerObserver,如果有多个timer用一个observer,你需要定义多个id
3构造timer
- CMiniTimer iTimer1;
- CMiniTimer iTimer2;
- CMiniTimer iTimer3;
- iTimer1= CMiniTimer(CActive::EPrioprtyIdle,aObserver,EFirst);
- iTimer2= CMiniTimer(CActive::EPrioprtyIdle,aObserver,ESecond);
- iTimer3= CMiniTimer(CActive::EPrioprtyIdle,aObserver,EThrid);
4用CTimer::After启动定时器。注意不推荐用这个timer进行At操作。一般会有问题。