Browsed by
Month: April 2010

一个还不错的symbian面试题

一个还不错的symbian面试题

刚想到一个还不错的symbian面试题 问题:根据AO的运行机制,通常会有如下的调用,TRequestStatus *status=&iStatus;User::RequestComplete(status, KErrNone); SetActive(); 假设,现在把User::RequestComplete(status, KErrNone); 换成iStatus = KErrNone。会有什么样的后果,请说明为什么? 分析: 这个题目考察了AO的运行原理和AS的内部机制,如果对AO的机制不是特别了解是没办法解答这道题目的。 首先,我们来看看AS的运行机制1.  调用 User::WaitForAnyRequest,这个函数会一直block住,直到当前线程收到一个semaphore2.  当收到一个信号时,3.  循环AS中所有的AO4.       检查AO的iStatus是否是KRequestPending,如果是,继续往下不是,则检查下一个AO5.          检查该AO是否已经active了,即SetActive已经调用过了。6.            如果满足条件,调用AO的RunL7.  Goto 1 好了,我们现在来看题目,这个AO已经调用了SetActive(),所以它满足第5行的条件,然后iStatus = KErrNone,那么它也满足第4行的条件。所以,就掉入了下面的假设。 如果系统里面就这么一个AO,那么什么都不会发生。如果系统里面有超过一个AO,而又有别的AO调用了例如User::RequestComplete(iStatus, KErrNone)之类的语句,使得第1行的条件满足,那么我们修改的AO就有可能被调用。什么情况下会被调用呢?是在我们改动的AO的优先级比别的AO都高时,它就会被调用。这么说来,这样的改动是可行的吗?当然不是,如果当前AO被调用到,那么意味着系统中一个期待被响应的AO被抢占了,所以,AS状态就乱了,最终会导致E32USER-CBase 46的panic,这是因为系统始终多处理一个AO,最后一次第一行响应后,发现没有AO了,就会报错。 缩写:AO — Active Object AS — Active Scheduler

开始建站的学习啦

开始建站的学习啦

目前的进展,win下和Ubuntu下都搭建好了环境。本来打算在Ubuntu下开发的,可是后来发现折腾配置什么的挺麻烦的,所以就换到了win下,在 win下大概3个小时左右搭建好了环境。