Win 程序员如何过度到Symbian程序员?
http://tech.ddvip.com 2008年06月15日 社区交流
内容摘要:本文讨论了当一个典型的Windows C++程序员初次接触Symbian操作系统时可能遇到的问题。我们开发过三个成功版本Symbian操作系统的经验使我们十分清楚在这个不算丰富稳定的环境中工作什么才是困难的。
使用活动对象时,头脑中时刻牢记活动对象何时按预定计划执行这个很简单的准则非常重要。这就是说,到底什么时候CActiveScheduler会调用一个CActive对象的RunL方法呢?。CActive对象必需是“活动”的。这是通过调用Cactive::SetActive实现的,通常在活动对象自己对应用程序某个请求做出的响应中完成。。CActive对象的状态,由成员变量iStatus所示,一定不能为KRequestPending.这个值表示该对象正在等待服务完成。通常在提出一个服务请求时变量iStatus才会被服务提供者设为KRequestPending.iStatus随后在服务结束时被服务者提供者更新。。CActiveScheduler需要接收到一个信号——该信号由异步服务在结束时发出。
当异步进程对应用程序发出结束信号,然而没有准备好的CActive对象时,就会产生一个“迷失”信号。这在以下几种情况下可能发生:。你忘记了使用CActive::SetActive使活动对象处于“活动”状态。。服务提供者在发出操作完成信号时忘记将iStatus置为非KRequestPending的值。这只会在你写了错误的服务提供者时出现——典型的应用程序会使用系统定义的服务。。服务提供者给同一个操作发出了不只一个终止信号。
第三种情况在服务提供者设计不够仔细的情况下可能发生。例如,有一个服务已经结束并且对客户端通知了这一事实,但是客户端恰恰在收到这个通知之前发出了取消服务的请求。服务提供者必需忽略这一当前不合理的请求。要是服务提供者没有忽略这一请求,而是对它做出响应并给出一个附加信号说已经结束了,会是怎么样呢?在这种情况中,附加的信号最终就会成为“迷失”信号,并会引起程序出错。这对于纠错来说很困难,因为“迷失”信号是被CActiveScheduler检测到的,没有显示是什么CActive对象的责任。
CActive对象必需确保在各种情况下与服务相关联的终止信号都恰当。在解除程序中应该典型的具有一个CActive::Cancel调用。如果Cancel没有被调用,而对象在有请求仍被挂起时就被删除,错误就会发生。而且,每个CActive对象必需以确保任何由该对象请求的服务都被取消的方式执行CActive::DoCancel,否则CActive::Cancel就会一直等待服务提供者的终止信号。这两种错误都很难被检测到,因为它们只在存在明显的请求时才会被发现。
结束语我们希望本文对Windows程序员开始Symbian操作系统下的工作能提供值得的期待和有用帮助。我们期望看到随着这片新市场的成长未来的Symbian操作系统及相关的编程范例是如何发展的。
责编:豆豆技术应用