|
||
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.