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