This document describes how to handle a single asynchronous request.
A thread that requests an asynchronous service from another thread can continue processing but eventually reaches a point where it must wait until the asynchronous request is complete before it can resume processing.
Typically, the requester performs the following sequence:
creates an object of
type TRequestStatus
to monitor the state of the request.
calls the asynchronous
provider's request function, passing the TRequestStatus
object;
all asynchronous functions are prototyped to take a TRequestStatus
parameter.
uses the operating system
function User::WaitForRequest()
to allow the thread to wait
for completion of the request.
TRequestStatus status; // Request status object someProvider.IssueRequest(parameters,status); // Issue the request ... User::WaitForRequest(status); // Wait for completion if (status==KErrNone) { /* success */ } else if (status==KErrXxx) { /* check for some error */ } else // check for other error conditions etc. ...
there is no special name for a request function; the request performed depends on the class, the function name and the parameters passed.
when the request is complete, an integer is stored in the request status object to convey additional information about the completion of the function. The meaning of the completion code varies from function to function. Additionally, information returned by the request may be returned to reference parameters passed to the request function.
The integer completion
code must not be KErrPending
. By convention, KErrNone
indicates
no error and KErrCancel
indicates a cancelled request. Other
values may be used for specific types of error.