有时候你会在一些源码中发现类似下面的代码:
TRequestStatus* s = &iStatus;
SetActive();
User::RequestComplete(s, KErrNone);
如果这段代码是在当前的活动对象类的一个函数中实现,
那么当这段代码执行完之后,将会立即调用此类的RUN()函数
具体过程是这样:
发送信号到Active scheduler(通过 thread-leve semaphore)Active scheduler查看当前活动对象的请求是否有完成的,然后找到完成的请求并调用那个活动对象(CActive)的RUN()函数. 所以不要认为是直接调用自己的run函数.
如果出现E32USER-CBase 错误,估计你的活动对象的ConstructL()中没有加入SetActive();导致信号迷失.
This panic is raised by an active scheduler, a [url=mk:@MSITStore:C:/Symbian/8.0a/S60_2nd_FP2_SC/Series60Doc/Symbian_DevLib.chm::/doc_source/reference/cpp/AsynchronousServices/CActiveSchedulerClass.html#%3a%3aCActiveScheduler]CActiveScheduler. It is caused by a stray signal