|
||
The majority of Symbian OS asynchronous services are provided by servers written in accordance with Symbian OS’s client-server
framework. A server is a thread running in user mode, which services requests from client threads also running in user mode.
An example of asynchronous service provided by a server is the EventReady(TRequestStatus* aStat)
function provided by the RWsSession
class — the client API to the window server. This function requests an event from the window server, which the user program
can extract and analyse using other RWsSession
functions.
As with services provided by the kernel, server-provided services are presented to clients through a client API, typically
an R
class such as RWsSession
, derived from RSessionBase
. When the RSessionBase
is opened, a server-side object is created and the client’s thread id is noted. Request functions are converted into an
inter-thread message which encapsulates all the parameters. When request functions complete, the server posts the request
status and signals the client thread’s request semaphore.
As with services provided by the kernel, the process of requesting asynchronous service from a server, and handling its completion, involves messaging and inter-thread communication. Symbian OS provides efficient services to support these.