|
||
The following example code shows how active objects are started. While the example shows the creation of an active scheduler, in UI applications, an active scheduler is always provided.
Create an instance of the active scheduler,
exampleScheduler
. This is an instance of a class derived from
CActiveScheduler
and provides an Error()
function to handle leaves occurring in the active object RunL()
function(s).
Push exampleScheduler
onto the cleanup stack and install
as the current active scheduler.
Create an active object, myActiveObject
, and pass a
pointer to the service provider as the parameter. Note that often, the service
provider may be constructed as part of the active object's own construction
processing.
Issue a request using IssueRequest()
.
Use CActiveScheduler::Start()
to start the active
scheduler’s wait loop. At least one outstanding request is necessary
before the wait loop is started, otherwise the thread hangs. All further
request issuing and servicing occurs within this function. The wait loop
continues until one of the active objects’ RunL()
requests
termination using CActiveScheduler::Stop()
.
Pop the active object, the active scheduler and the example service
provider from the clean-up stack, and destroy. The code assumes that the active
object does not take ownership of the CExampleServiceProvider
object and is not responsible for its destruction.
LOCAL_C void doExampleL()
{
// Create and install the active scheduler
CActiveScheduler* exampleScheduler=new (ELeave) CExampleScheduler;
CleanupStack::PushL(exampleScheduler);
CActiveScheduler::Install(exampleScheduler);
// Create the service provider. Often, the
// service provider is part of the active object
CExampleServiceProvider* myServiceProvider=new (ELeave) CExampleServiceProvider;
CleanupStack::PushL(myServiceProvider);
// Create the active object and issue the
// first asynchronous request
CExampleActiveObject * myActiveObject=new (ELeave) CExampleActiveObject(myServiceProvider);
CleanupStack::PushL(myActiveObject);
myActiveObject->IssueRequest();
// Now we can start the active scheduler
CActiveScheduler::Start();
// Remove the exampleScheduler and other
// objects from cleanup stack and destroy them
CleanupStack::PopAndDestroy(3);
}