Simple encapsulation of a service provider

This document describes how to use derived active object classes to encapsulate services.

Some active object classes do not implement a RunL() function. Such classes are intended for derivation.

For example, the general purpose CTimer class provides encapsulation of the timer services offered by the RTimer class, but provides no RunL() to handle their completion. To use the CTimer class, you must derive from it again and provide a RunL() function.

Some asynchronous service providers may provide facilities for more than one request to be outstanding simultaneously. However, a single active object can only have one request outstanding. If all the facilities of such an asynchronous service provider must be used in a program, then it must be encapsulated by more than one active object.