Many asynchronous services are provided to user threads by the kernel.
The RTimer
class is an example. It includes functions such as:
After(TRequestStatus &aStatus,TTimeIntervalMicroSeconds32 anInterval);
This makes a timer request that completes after a given number of microseconds.
The RTimer
class is a client-side handle to the kernel’s timer service. When an RTimer
is opened, using its CreateLocal()
function, a Kernel object is created which holds the state of the timer and the ID of the client’s thread. When a request function is issued, the client-side handle:
sets the passed TRequestStatus
to KRequestPending
sends a message to the Kernel identifying the RTimer
client-side handle, the TRequestStatus
object and the time interval in microseconds.
returns to the caller.
When the Kernel side timer completes, it posts the TRequestStatus
with a completion code, normally KErrNone
, and uses the thread id stored with the Kernel side timer object to signal the thread’s request semaphore.
Provision of asynchronous services by the Kernel involves sending messages between the client thread and the Kernel.
The Kernel provides the most basic services available. Its main services are defined in e32std.h
, including timing, notification and the classes used in the client-server framework.