WEB开发网
开发学院手机开发Symbian 开发 Symbian 活动规划器 CActiveScheduler 的灵活应用... 阅读

Symbian 活动规划器 CActiveScheduler 的灵活应用

 2010-03-26 21:23:00 来源:WEB开发网   
核心提示:aDelay){Cancel(); // Cancel any request, just to be sureiState = aState;iTimer.After(iStatus, aDelay); // Set for laterSetActive(); // Tell scheduler a request
aDelay)

{

Cancel(); // Cancel any request, just to be sure

iState = aState;

iTimer.After(iStatus, aDelay); // Set for later

SetActive(); // Tell scheduler a request is active

}

void CNewClassTest::RunL()

{

if (iState == EUninitialized)

{

// older timer event, 当CActiveScheduler::Start()后,程序先到达这里

iState = 10;

}

else if(iState == EInitialized)

{

//// new timer event

iState = 201;

CActiveScheduler::Stop();

}

}

TInt CNewClassTest::RunError(TInt aError)

{

return aError;

}

// 测试代码

// TInt ThreadEntry(TAny *arg), 用户线程的入口函数,省略了一些必要的初始化

TInt ThreadEntry(TAny *arg)

{

CNewClassTest *obj1 = CNewClassTest::NewL();

CNewClassTest *obj2 = CNewClassTest::NewL();

obj-1>StartL(CNewClassTest::EUninitialized,TTimeIntervalMicroSeconds32(1000000)); //1(s)

User::After(5000000); // sleep 5(s)

obj2->StartL(CNewClassTest::EInitialized,TTimeIntervalMicroSeconds32(20000)); //20(ms)

CActiveScheduler::Start();

delete obj1;

delete obj2;

}

以上代码演示了如何灵活使用CActiveScheduler::Start(),至于具体的实现上,还需要调整一下,CActiveScheduler::Start()的必须还要同时启动一个超时定时器,当在设定的超时时间内没有任何异步时间完成,则在超时AO内停止活动规划器CActiveScheduler::Stop(),这样等待下一个循环到来再启动活动规划器。此时可继续执行被 CActiveScheduler::Start()方法挂起的语句和方法。

总结:

1. 可以解决移植代码中出现的上述情况

2. 异步事件的完成检测有时延

3. 因为是异步事件,对于一定的时延,还是可以接受的

上一页  1 2 3 4 5 6 

Tags:Symbian 活动 规划

编辑录入:coldstar [复制链接] [打 印]
赞助商链接