// Tworzymy i inicjalizujemy trzy obiekty klasy RTimer
// oferujcej metody do asynchronicznego odmierzania czasu. 	
RTimer zegar1, zegar2, zegar3;
zegar1.CreateLocal();
zegar2.CreateLocal();
zegar3.CreateLocal();

// Deklarujemy trzy zmienne klasy TRequestStatus w celu
// ich przekazania do metody RTimer::After().
TRequestStatus status1, status2, status3;

// Tworzymy oraz inicjalizujemy zmienne do przechowywania
// dugoci odcinkw czasowych dla poszczeglnych zegarw.
TTimeIntervalMicroSeconds32 czas1, czas2, czas3;
czas1 = 1000000;    // 1 sek.
czas2 = 2000000;    // 2 sek.
czas3 = 3000000;    // 3 sek.

// Startujemy podwjne asynchroniczne odmierzanie czasu
zegar1.After( status1, czas1 );
zegar2.After( status2, czas2 );
// Czekamy, a jedna z usug asynchronicznego odmierzania
// czasu si zakoczy.
User::WaitForRequest( status1, status2 );
// Tu jestemy po pierwszej sekundzie (zegar1 odmierzy czas). 
User::WaitForRequest( status2 );
// Tu jestemy po kolejnej sekundzie (zegar2 odmierzy czas).

// Startujemy potrjne asynchroniczne odmierzanie czasu. 
zegar1.After( status1, czas1 );
zegar2.After( status2, czas2 );
zegar3.After( status3, czas3 );
// Tworzymy tablic na 3 wskaniki do obiektw klasy TRequestStatus.
TRequestStatus* statusy[3];
// Wypeniamy tablic wskanikami.
statusy[0] = &status1;
statusy[1] = &status2;
statusy[2] = &status3;
// Czekamy na zakoczenie dowolnej usugi asynchronicznej.
User::WaitForNRequest( statusy, 3 );
// Tu jestemy po pierwszej sekundzie (zegar1 odmierzy czas).
// status1.iStatus = KErrNone

// Nie czekamy na pozostae zegary.
zegar2.Cancel();
User::WaitForRequest( status2 );
// status2.iStatus = KErrCancel
zegar3.Cancel();
User::WaitForRequest( status3 );
// status3.iStatus = KErrCancel

// Zwalniamy obiekty zegarw.
zegar1.Close();
zegar2.Close();
zegar3.Close();
