Symbian 活动规划器 CActiveScheduler 的灵活应用
2010-03-26 21:23:00 来源:WEB开发网class TimeCount : public CActive
{
public :
static TimeCount* NewLC(); // 构造函数
~TimeCount();
void StartL(); // 计数开始
void ConstructL();
void RunL(); // 延时事件到达以后的处理函数
void DoCancel(); // 取消请求提交
void setDelayTime(int delayTime);
private:
TimeCount();
RTimer iTimer; // 定时器
int iTimeCount; // 计数器
int mTime; // 计数间隔时间 单位秒
};
TimeCount::TimeCount()
: CActive(0) // 这里可以设置活动对象的优先级
{
// 把自己加入活动规划器
CActiveScheduler::Add(this);
}
TimeCount* TimeCount::NewLC()
{
TimeCount* result = new (ELeave) TimeCount();
CleanupStack::PushL( result );
result->ConstructL();
return result;
}
void TimeCount::DoCancel(void)
{
iTimer.Cancel();
}
void TimeCount::setDelayTime(int mTime)
{
DelayTime = mTime;
}
TimeCount::~TimeCount()
{
Cancel();
iTimer.Close();
}
void TimeCount::StartL()
{
// 设定定时器状态为每隔mTime秒钟状态完成一次
iTimer.After(iStatus, 10000 * 100 * mTime);
// 提交异步请求
SetActive();
}
void TimeCount::ConstructL()
{
// 初始化计数器和定时器
iTimeCount = 0;
User::LeaveIfError(iTimer.CreateLocal());
}
void TimeCount::RunL()
{
// 计数器+1以后继续提交延时请求事件
printf("The Count is ->>%d", iTimeCount++);
StartL();
}
每一个活动服务对象都有一个iStatus来标识当前对象的状态.在这里我们把iStatus设定为iTimer.After(iStatus, 10000
更多精彩
赞助商链接