This document describes how an active object issues a request for a service.
Once the active object has been constructed, a request can be issued. In
the following code fragment, the active object provides the function IssueRequest()
to
invoke the encapsulated service function.
void CExampleActiveObject::IssueRequest() { // Request the service iServiceProvider-> RequestTheService(iStatus); // Indicate request has been issued SetActive(); }
Pass the TRequestStatus
object,
provided by the active objects's CActive
base class, to the
service function. As part of its processing, the service function sets this
to KRequestPending
, indicating that the request has been
issued but is not yet complete.
Set the base class's
active request flag, using the function SetActive()
, to indicate
that the active object is currently active. The flag is reset by the active
scheduler before handling a completed request, or by the active object base
class as part of the cancellation protocol.
At some point, the service
provider's processing completes and it calls RThread::RequestComplete()
passing
the request status object and the service provider's return code, a value
other than KRequestPending
. This results in the active object's iStatus
member
being set to the return code value and a signal that the request is complete.