Symbian 编程之活动对象正解
2010-03-18 20:58:00 来源:WEB开发网但是在通常情况下,我们会在构造函数传入EPriorityStandard。
三、活动调度器Start方法的伪代码
通过以上两点分析,我们完全可以模拟出CActiveScheduler::Start方法:
void CActiveScheduler::Start() { for (;;) { // 挂起线程直到异步函数消息返回 // 注:活动调度器和应用程序不在一个线程,所以应用程序不会阻塞 User::WaitForAnyRequest(); // 如果异步函数和主程序在不同的线程则RThread::WaitForAnyRequest(); // 当消息返回的时候线程会苏醒 // 以优先级降序的方式检测调度器集合中每个活动对象 for (;;) { // 调用第一个已完成且iActive == ETrue的活动对象事件处理函数 if (activeObject->IsActive() && activeObject->iStatus != KRequestPending) { // 找到一个已准备好处理事件的活动对象 // 重置iActive状态以表明其不再是活动状态了 activeObject->iActive = EFalse; // 在TRAP中调用活动对象的事件处理函数 TRAPD(err, activeObject->RunL()) ; if (err != KErrNone) { // 如果异常则调用活动对象的RunError方法 err = activeObject->RunError(); if (err != KErrNone) { Error(err); } } break; } } } }四、使用活动对象的例子
点击此处下载源代码
此例子将启动一个控制台程序,并使用异步服务类RTimer定时器,每隔一秒在屏幕上显示累加的数字,效果如下:
五、小结
在这一节中,我们基本了解了活动调度器、活动对象的工作机制及工作流程,在下一节里,我们将深入活动对象的内部,了解其工作原理,进一步加深对活动对象的理解。
Symbian编程总结-基础篇-活动对象正解(3)-活动对象的工作原理
我们已经知道如何创建和使用活动对象,大家对活动对象的创建、使用都有了一定的了解。在这一节里我将深入活动对象机制,分为“活动对象的工作流程”、“信号迷失错误”两个部分,为大家剖析活动对象的工作原理。
一、活动对象工作流程
首先我们用时序图来说明一下应用程序、活动对象、活动调度器及异步函数服务器之间创建及调用的流程:
下面我们针对每一个步骤结合代码(点击此处下载代码)进行说明:
1、创建并安装活动调度器:
CActiveScheduler* scheduler = new (ELeave) CActiveScheduler(); CleanupStack::PushL(scheduler);
更多精彩
赞助商链接