Symbian Developer Library

SYMBIAN OS V6.1 EDITION FOR C++

[Index] [Glossary] [Previous] [Next]



How to use a change notifier

To use a change notifier, a thread:

When a change occurs, the change information is made available to the thread through the TRequestStatus object and the thread's request semaphore is signalled to indicate that the request is complete.

The following code fragments demonstrates this:

{
...
RChangeNotifier the_notifier;
TRequestStatus the_status;
...
the_notifier.Create();
the_notifier.Logon(the_status);
User::WaitForRequest(the_status);
...
...// prepare for a long wait
...
TInt changes = the_status.Int();
if (changes & EChangesSystemTime)
    {
    // handle a change to system time
    }
if (changes & EChanges EChangesLocale)
    {
    // handle a change to locale
    }
...
the_notifier.Close();
...
}

In practical code, an RChangeNotifier would be part of an active object.

The RChangeNotifier handle also offers the LogonCancel() function. Calling this function, causes the thread's request semaphore to be signalled and any wait to complete. The TRequestStatus is set to KErrCancel.

The above technique for checking changes is used because, at the completion of a notification request, any, or all, changes may be reported. Code should make no assumptions about the other bits in the returned value. In other words, code should be prepared for a notification request to complete without an 'interesting' change.

Users should also note that the first notification request after creation of an RChangeNotifier, completes immediately; the changes reported are all those defined by the TChanges enum.

Also note that after a notification request completes, other changes may occur before the user of the RChangeNotifier can issue the next notification request. If this occurs, any change events are collected by the change notifier; they are not lost; in this situation, the next notification request completes immediately.