diff -r 89d6a7a84779 -r 25a17d01db0c Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_wait_loop_8cpp-source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_wait_loop_8cpp-source.html Fri Jan 22 18:26:19 2010 +0000 @@ -0,0 +1,108 @@ + + +TB10.1 Example Applications: examples/Base/IPC/Async/WaitLoop/WaitLoop.cpp Source File + + + + +

examples/Base/IPC/Async/WaitLoop/WaitLoop.cpp

00001 // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+00002 // All rights reserved.
+00003 // This component and the accompanying materials are made available
+00004 // under the terms of "Eclipse Public License v1.0"
+00005 // which accompanies this distribution, and is available
+00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
+00007 //
+00008 // Initial Contributors:
+00009 // Nokia Corporation - initial contribution.
+00010 //
+00011 // Contributors:
+00012 //
+00013 // Description:
+00014 // Show asynchronous programming (without active objects)
+00015 // Example shows how a wait loop can be used to identify how a
+00016 // request completed and service its completion
+00017 //
+00018         
+00019 
+00020 #include "CommonFramework.h"
+00021 #include <e32math.h>
+00022 
+00023 //
+00024 // utility functions
+00025 //
+00026 
+00027 LOCAL_D TInt64 smallRandSeed;
+00028 
+00029 LOCAL_C TInt smallRand()
+00030         { 
+00031           // produce small random numbers in range 0..9
+00032         TInt bigResult=Math::Rand(smallRandSeed);// result uses full 32-bit range
+00033         return bigResult % 10;                   // return result mod 10
+00034         }
+00035 
+00036 LOCAL_C void sleep(TInt aTenths)
+00037         { 
+00038           // sleep for an interval measured in tenths of a second
+00039         User::After(aTenths*100000); // just let the User function do it for us
+00040         }
+00041 
+00042 
+00043 // Do the example
+00044 LOCAL_C void doExampleL()
+00045     {
+00046           // create and initialize heartbeat timer
+00047         RTimer heartbeat;               // heartbeat timer
+00048         TRequestStatus heartbeatStatus; // request status associated with it
+00049         heartbeat.CreateLocal();        // always created for this thread
+00050 
+00051           // issue first heartbeat request
+00052         heartbeat.After(heartbeatStatus,1000000); // request completion
+00053                                                   // after 1 second
+00054         TInt heartbeatTick=0;                     // counts heartbeat ticks
+00055 
+00056           // wait loop
+00057         for (;;)
+00058                 {
+00059                   // wait for any request
+00060                 User::WaitForAnyRequest();
+00061                   // find out which request completed, and handle it
+00062                 if (heartbeatStatus!=KRequestPending)
+00063                         {
+00064                           // heartbeat completed so service request
+00065                         _LIT(KMsgServicing,"Servicing heartbeat tick %d ...\n");
+00066                         console->Printf(KMsgServicing,heartbeatTick);
+00067                           // take some time over it
+00068                         sleep(smallRand());
+00069                         _LIT(KMsgServiced,"... heartbeat tick %d serviced\n");
+00070                         console->Printf(KMsgServiced,heartbeatTick);
+00071                           // test whether processing should finish
+00072                         if (heartbeatTick >= 10)
+00073                                 {
+00074                                   // 10 heart-beats: processing finished
+00075                                 _LIT(KMsgFinishing,"Finishing\n");
+00076                                 console->Printf(KMsgFinishing);
+00077                                   // finish wait loop
+00078                                 break;
+00079                                 }
+00080                           // re-issue request
+00081                         heartbeatTick++;                          // increment tick
+00082                                                                   // counter
+00083                         heartbeat.After(heartbeatStatus,1000000); // request completion
+00084                                                                   // after another second
+00085                         }
+00086                 else
+00087                         {
+00088                           // stray signal
+00089                         _LIT(KMsgStraySignal,"Stray signal\n");
+00090                         User::Panic(KMsgStraySignal, 1); // panic!
+00091                         }
+00092                 }
+00093 
+00094         // close timer
+00095         heartbeat.Close(); // close timer
+00096         }
+

Generated on Thu Jan 21 10:32:56 2010 for TB10.1 Example Applications by  + +doxygen 1.5.3
+ +