Active Object Pitfalls
A stray-event panic from the Active Scheduler ( E32USER-CBASE 46 error ) is a most common problem with an Active Objects. This is ussually caused by one ( or more ) of the following:
- You forgot to call CActiveScheduler::Add() before starting the Active Object.
- You dont call SetActive() after issuing an async request.
- Passing the same iStatus to two service providers at the same time ( multiple requests outstanding on the same Active Object ).
Do not invoke DoCancel() directly - it should be private - always call Cancel(). Note that Cancel() should be always be called in the destructor of your derived class.
Other related pitfalls (triggering other panics):
- Using your own TRequestStatus variable, instead of using the one provided by CActive.
- Passing automatic variables when doing an asynchronous request.
Careless use of active objects can degrade the response time of UI in case of:
- Priority of active object is higher than it is necessary
- Method RunL() works too long