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 @@ + +
+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 } +